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
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 _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)