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

Dan*_*din 8 django django-haystack elasticsearch

看起来好像有弹性搜索支持模糊查询(http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query/)但是我无法找到让django-haystack通过该选项的方法.

我挖到了django-haystack搜索,看起来好像在使用elasticsearch后端时使用'match_all'查询.是否有可能在不必修改django-haystack源代码的情况下获得模糊匹配行为?

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

Ben*_*tin 6

无需分叉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
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的方法 - 感谢您提出建议。我会尝试整合它,让你知道它是怎么回事。 (2认同)