Beispiel #1
0
    def _create_search_request(self):
        req = SearchRequest(self.form.q.data)
        
        if self.form.fl.data:
            fields = list(set(self.form.fl.data.split(',') + config.SOLR_SEARCH_REQUIRED_FIELDS))
        else:
            fields = self.user.get_allowed_fields()

        req.set_fields(fields)
            
        if self.form.rows.data:
            req.set_rows(self.form.rows.data)
        else:
            req.set_rows(config.SEARCH_DEFAULT_ROWS)
            
        if self.form.start.data:
            req.set_start(self.form.start.data)
            
        if self.form.sort.data:
            sort_tokens = re.split('[\s,]+', self.form.sort.data)
            # tupleize the list into field,direction pairs
            sort_tokens = zip(*[iter(sort_tokens)] * 2)
            for sort, direction in sort_tokens:
                sort_field = config.SEARCH_SORT_OPTIONS_MAP[sort][0]
                req.add_sort(sort_field, direction)
        else:
            for field, direction in config.API_SOLR_DEFAULT_SORT:
                req.add_sort(field, direction)
                
        if len(self.form.facet.data):
            for facet in self.form.facet.data:
                facet = facet.split(':')
                api_facet_name = facet[0]
                solr_field_name = config.API_SOLR_FACET_FIELDS[api_facet_name]
                if api_facet_name != solr_field_name:
                    # translate api facet name to solr field name in request *and* response
                    # see http://wiki.apache.org/solr/SimpleFacetParameters#key_:_Changing_the_output_key
                    output_key = api_facet_name
                    facet[0] = solr_field_name
                else:
                    output_key = None
                req.add_facet(*facet, output_key=output_key)
        
        if len(self.form.hl.data):
            for hl in self.form.hl.data:
                if ':' in hl:
                    req.add_highlight(*hl.split(':'))
                else:
                    req.add_highlight(hl)
                
        if len(self.form.filter.data):
            for fltr in self.form.filter.data:
                req.add_filter_query(fltr)
                
        if self.form.hlq.data:
            req.set_hlq(self.form.hlq.data)
            
        return req
Beispiel #2
0
 def test_solr_request_add_facet_output_key(self):
     
     req = SearchRequest("foo")
     req.add_facet("author", output_key="authorz")
     self.assertEqual(req.params['facet.field'], ["{!ex=dt key=authorz}author"])
     
     req = SearchRequest("foo")
     req.add_facet("title", limit=10, output_key="titlez")
     self.assertEqual(req.params['facet.field'], ["{!ex=dt key=titlez}title"])
     self.assertEqual(req.params['f.title.facet.limit'], 10)
    def test_solr_request_add_facet_output_key(self):

        req = SearchRequest("foo")
        req.add_facet("author", output_key="authorz")
        self.assertEqual(req.params['facet.field'],
                         ["{!ex=dt key=authorz}author"])

        req = SearchRequest("foo")
        req.add_facet("title", limit=10, output_key="titlez")
        self.assertEqual(req.params['facet.field'],
                         ["{!ex=dt key=titlez}title"])
        self.assertEqual(req.params['f.title.facet.limit'], 10)
Beispiel #4
0
 def _create_search_request(self):
     req = SearchRequest(self.form.q.data)
     
     if self.form.fl.data:
         fields = list(set(self.form.fl.data.split(',') + config.SOLR_SEARCH_REQUIRED_FIELDS))
         req.set_fields(fields)
     else:
         req.set_fields(self.user.get_allowed_fields())
         
     if self.form.rows.data:
         req.set_rows(self.form.rows.data)
     else:
         req.set_rows(config.SEARCH_DEFAULT_ROWS)
         
     if self.form.start.data:
         req.set_start(self.form.start.data)
         
     if self.form.sort.data:
         (sort, direction) = self.form.sort.data.split()
         sort_field = config.SOLR_SORT_OPTIONS[sort]
         req.set_sort(sort_field, direction)
     else:
         req.set_sort(*config.API_SOLR_DEFAULT_SORT)
         
     if len(self.form.facet.data):
         for facet in self.form.facet.data:
             facet = facet.split(':')
             api_facet_name = facet[0]
             solr_field_name = config.API_SOLR_FACET_FIELDS[api_facet_name]
             if api_facet_name != solr_field_name:
                 # translate api facet name to solr field name in request *and* response
                 # see http://wiki.apache.org/solr/SimpleFacetParameters#key_:_Changing_the_output_key
                 output_key = api_facet_name
                 facet[0] = solr_field_name
             else:
                 output_key = None
             req.add_facet(*facet, output_key=output_key)
     
     if len(self.form.hl.data):
         for hl in self.form.hl.data:
             req.add_highlight(hl.split(':'))
             
     if len(self.form.filter.data):
         for fltr in self.form.filter.data:
             req.add_filter(fltr)
             
     if self.form.hlq.data:
         req.set_hlq(self.form.hlq.data)
         
     return req
 def test_solr_request_add_facet(self):
     req = SearchRequest("foo")
     self.assertFalse(req.facets_on())
     self.assertNotIn('facet', req.params)
     req.add_facet('author')
     self.assertTrue(req.facets_on())
     self.assertEqual(req.get_facets(),
                      [('author', None, None, None, None)])
     self.assertEqual(req.params['facet'], 'true')
     self.assertEqual(req.params['facet.field'], ['author'])
     req.add_facet('bibstem')
     self.assertEqual(req.get_facets(),
                      [('author', None, None, None, None),
                       ('bibstem', None, None, None, None)])
     self.assertEqual(req.params['facet.field'], ['author', 'bibstem'])
     req.add_facet('keyword', 10)
     self.assertEqual(req.get_facets(),
                      [('author', None, None, None, None),
                       ('bibstem', None, None, None, None),
                       ('keyword', 10, None, None, None)])
     self.assertEqual(req.params['facet.field'],
                      ['author', 'bibstem', 'keyword'])
     self.assertIn('f.keyword.facet.limit', req.params)
     self.assertEqual(req.params['f.keyword.facet.limit'], 10)
     req.add_facet('author', 10, 5)
     self.assertEqual(req.get_facets(),
                      [('author', 10, 5, None, None),
                       ('bibstem', None, None, None, None),
                       ('keyword', 10, None, None, None)])
     self.assertEqual(req.params['facet.field'],
                      ['author', 'bibstem', 'keyword'])
     self.assertIn('f.author.facet.limit', req.params)
     self.assertIn('f.author.facet.mincount', req.params)
     self.assertEqual(req.params['f.author.facet.limit'], 10)
     self.assertEqual(req.params['f.author.facet.mincount'], 5)
Beispiel #6
0
 def test_solr_request_add_facet(self):
     req = SearchRequest("foo")   
     self.assertFalse(req.facets_on())
     self.assertNotIn('facet', req.params)
     req.add_facet('author')
     self.assertTrue(req.facets_on())
     self.assertEqual(req.get_facets(), [('author', None, None, None, None)])
     self.assertEqual(req.params['facet'], 'true')
     self.assertEqual(req.params['facet.field'], ['author'])
     req.add_facet('bibstem')
     self.assertEqual(req.get_facets(), [('author', None, None, None, None), ('bibstem', None, None, None, None)])
     self.assertEqual(req.params['facet.field'], ['author', 'bibstem'])
     req.add_facet('keyword', 10)
     self.assertEqual(req.get_facets(), [('author', None, None, None, None), ('bibstem', None, None, None, None), ('keyword', 10, None, None, None)])
     self.assertEqual(req.params['facet.field'], ['author', 'bibstem', 'keyword'])
     self.assertIn('f.keyword.facet.limit', req.params)
     self.assertEqual(req.params['f.keyword.facet.limit'], 10)
     req.add_facet('author', 10, 5)
     self.assertEqual(req.get_facets(), [('author', 10, 5, None, None), ('bibstem', None, None, None, None), ('keyword', 10, None, None, None)])
     self.assertEqual(req.params['facet.field'], ['author', 'bibstem', 'keyword'])
     self.assertIn('f.author.facet.limit', req.params)
     self.assertIn('f.author.facet.mincount', req.params)
     self.assertEqual(req.params['f.author.facet.limit'], 10)
     self.assertEqual(req.params['f.author.facet.mincount'], 5)