11

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

4

1 回答 1

10

无需分叉 Haystack,您可以在自己的后端更新该方法(有关更多详细信息,请参阅Stretching 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
于 2013-08-02T11:50:03.003 回答