Как я могу выполнить нечеткий поиск с помощью 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