【问题标题】:How can I do a fuzzy search using django-haystack and the elasticsearch backend?如何使用 django-haystack 和 elasticsearch 后端进行模糊搜索?
【发布时间】:2013-08-01 17:28:29
【问题描述】:

看起来 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 方法)

【问题讨论】:

  • 丹,你在这方面有什么进展吗?
  • @Alp - 是的。我最终使用了 bennylope 的建议,尽管我花了很多时间来弄清楚如何构建请求以及提交它的端点。然后我意识到它不像我想要的那样可配置,所以我最终后退了几步,得到了更大的搜索结果集,然后用我自己的“模糊”算法遍历它们。

标签: django elasticsearch django-haystack


【解决方案1】:

无需 fork Haystack,您可以在自己的后端更新该方法(有关更多详细信息,请参阅Stretching Haystack's ElasticSearch Backend)。 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

【讨论】:

  • 这是一个很好的方法 - 感谢您的建议。我会尝试整合它,让你知道它是怎么回事。
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2016-01-18
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多