使用django haystack+Elasticsearch如何搜索单词的子集



如果我输入查询"apple",我希望得到像"xyzapplexyz"、"apple"、"appleexyz"和NOT之类的结果,比如"app"或"apple。但我得到的是"applexyz"、"app"等

我使用了EdgeNgram字段,并尝试使用以下内容进行查询:-

1-->SearchQuerySet().all().autocomplete(authors=query)

2-->SearchQuerySet().all().filter(authors=query)

3-->SearchQuerySet().all().filter(content=query)

4-->SearchQuerySet().all().autocomplete(content=query)

但它们都没有给出所需的结果。如何解决此问题?

如果您想要像"xyzapplexyz"这样的结果,那么您需要使用ngram分析器而不是EdgeNGram,或者您可以根据需要同时使用这两种分析器。EdgeNGram仅从一开始就生成令牌。

对于NGram,apple将是术语xyzapplexyz的生成令牌之一,假设max_gram >=5,您将获得预期结果,search_analyzer也需要不同,否则您将获得奇怪的结果。

此外,如果您有大量的文本,index size可能会在ngram中变得相当大

相关内容

  • 没有找到相关文章

最新更新