示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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