一尘不染

如何使用django-haystack和elasticsearch后端进行模糊搜索?

elasticsearch

看起来Elasticsearch支持模糊查询(http://www.elasticsearch.org/guide/reference/query-
dsl/fuzzy-query/),但我想不出办法让django-haystack通过该选项。

我研究了django-haystack搜索,在使用elasticsearch后端时,好像在使用“
match_all”查询。是否有可能获得模糊匹配行为而无需修改django-haystack源代码?


阅读 599

收藏
2020-06-22

共1个答案

一尘不染

无需派生Haystack,您可以在自己的后端中更新该方法(有关更多详细信息,请参见拉伸Haystack的ElasticSearch后端)。该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
2020-06-22