def test_build_search_kwargs_function_score(self): function_score = { 'functions': [{ 'filter': { 'term': { 'type': 'micromasters' } }, 'weight': 10.0 }], 'boost': 5.0, 'score_mode': 'multiply', 'boost_mode': 'sum' } boost_config = ElasticsearchBoostConfig.get_solo() boost_config.function_score = function_score boost_config.save() with patch.object(BaseSearchBackend, 'build_models_list', return_value=[]): kwargs = self.backend.build_search_kwargs( self.specific_query_string) expected_function_score = {'function_score': function_score} expected_function_score['function_score']['query'] = { 'query_string': self.simple_query } self.assertDictEqual(kwargs['query'], expected_function_score)
def test_build_search_kwargs_function_score(self): function_score = { 'functions': [ { 'filter': { 'term': { 'type': 'micromasters' } }, 'weight': 10.0 } ], 'boost': 5.0, 'score_mode': 'multiply', 'boost_mode': 'sum' } boost_config = ElasticsearchBoostConfig.get_solo() boost_config.function_score = function_score boost_config.save() with patch.object(BaseSearchBackend, 'build_models_list', return_value=[]): kwargs = self.backend.build_search_kwargs(self.specific_query_string) expected_function_score = { 'function_score': function_score } expected_function_score['function_score']['query'] = { 'query_string': self.simple_query } self.assertDictEqual(kwargs['query'], expected_function_score)
def get_typeahead_response(self, query=None, partner=None): qs = '' query_dict = {'q': query, 'partner': partner or self.partner.short_code} if query: qs = urllib.parse.urlencode(query_dict) url = '{path}?{qs}'.format(path=self.path, qs=qs) config = ElasticsearchBoostConfig.get_solo() config.function_score.update(self.function_score) config.save() return self.client.get(url)
def build_search_kwargs(self, *args, **kwargs): """ Override default `build_search_kwargs` method to set simpler default search query settings. source: https://github.com/django-haystack/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py#L254 Without this override the default is: 'query_string': { 'default_field': content_field, 'default_operator': DEFAULT_OPERATOR, 'query': query_string, 'analyze_wildcard': True, 'auto_generate_phrase_queries': True, 'fuzzy_min_sim': FUZZY_MIN_SIM, 'fuzzy_max_expansions': FUZZY_MAX_EXPANSIONS, } """ query_string = args[0] search_kwargs = super(SimpleQuerySearchBackendMixin, self).build_search_kwargs(*args, **kwargs) simple_query = { 'query': query_string, 'analyze_wildcard': True, 'auto_generate_phrase_queries': True, } # https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-function-score-query.html function_score_config = ElasticsearchBoostConfig.get_solo().function_score function_score_config['query'] = { 'query_string': simple_query } function_score = { 'function_score': function_score_config } if search_kwargs['query'].get('filtered', {}).get('query'): search_kwargs['query']['filtered']['query'] = function_score elif search_kwargs['query'].get('query_string'): search_kwargs['query'] = function_score return search_kwargs