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

2024-05-05

看起来好像elasticsearch支持模糊查询(http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/ http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/)但我无法找到让 django-haystack 传递该选项的方法。

我深入研究了 django-haystack 搜索,它看起来好像在使用 elasticsearch 后端时使用“match_all”查询。是否可以在不修改 django-haystack 源代码的情况下获得模糊匹配行为?

干草堆来源:https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py https://github.com/toastdriven/django-haystack/blob/master/haystack/backends/elasticsearch_backend.py(我怀疑我需要更改 build_search_kwargs 方法)


无需 fork Haystack,您可以在自己的后端更新该方法(更多详细信息,请参阅扩展 Haystack 的 ElasticSearch 后端 https://wellfire.co/learn/custom-haystack-elasticsearch-backend/). The build_search_kwargs方法返回一个字典,因此您只需修改原始返回值即可。

免责声明:此代码只是您如何更新自己的后端的示例,not如何实现模糊搜索。

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 django-haystack 和 elasticsearch 后端进行模糊搜索? 的相关文章

随机推荐