Как я могу выполнить нечеткий поиск с помощью django-haystack и бэкэнда elasticsearch?

похоже, что elasticsearch поддерживает нечеткие запросы (http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/) но я не могу понять, как получить пропуск django-haystack в этой опции.

я копался в поиске django-haystack, и похоже, что он использует запрос "match_all" при использовании бэкэнда elasticsearch. Можно ли получить поведение нечеткого соответствия без необходимости изменять источник django-haystack код?

Источник Стога Сена: https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py (Метод build_search_kwargs-это то, что я подозреваю, что мне нужно изменить)

1 ответов


нет необходимости вилять стог сена, вы можете обновить этот метод в своем собственном бэкэнде (Подробнее см. растяжка Сена ElasticSearch бэкэнд). The build_search_kwargs метод возвращает словарь, поэтому вы можете просто изменить исходное возвращаемое значение.

отказ от ответственности: этот код является лишь примером того, как вы можете обновить свой собственный бэкэнд,не как реализовать нечеткий поиск.

class FuzzyBackend(ElasticsearchSearchBackend):
    def build_search_kwargs(self, query_string, **kwargs):
        fuzzy = kwargs.pop('fuzzy', False)
        fuzzy_field = kwargs.pop('min_similarity', '')
        search_kwargs = super(FuzzyBackend, self).build_search_kwargs(
                query_string, kwargs)
        if fuzzy:
            search_kwargs = {'fuzzy': {fuzzy_field: query_string}}
        return search_kwargs