看起来Elasticsearch支持模糊查询(http://www.elasticsearch.org/guide/reference/query- dsl/fuzzy-query/),但我想不出办法让django-haystack通过该选项。
我研究了django-haystack搜索,在使用elasticsearch后端时,好像在使用“ match_all”查询。是否有可能获得模糊匹配行为而无需修改django-haystack源代码?
无需派生Haystack,您可以在自己的后端中更新该方法(有关更多详细信息,请参见拉伸Haystack的ElasticSearch后端)。该build_search_kwargs方法返回一个字典,因此您可以修改原始的返回值。
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