如果我输入查询"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
中变得相当大