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

Using django-haystack +Elasticsearch how can I search subsets of a word?

如果我输入查询 "apple",我希望得到像 "xyzapplexyz"、"apple"、"applexyz" 和 NOT[=29= 这样的结果] 喜欢 "app" 或 "appl" 。但我得到的是 "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)

但其中 none 给出了所需的结果。我该如何解决这个问题?

如果您想要 "xyzapplexyz" 这样的结果,则需要使用 ngram analyzer 而不是 EdgeNGram,或者您可以根据需要使用两者。 EdgeNGram 仅从头开始生成令牌。

with NGram apple 将是术语 xyzapplexyz 的生成标记之一,假设 max_gram >=5 和你会得到预期的结果,search_analyzer 也需要不同,否则你会得到奇怪的结果。

此外,index size 如果您有大量文本

ngram 可能会变得相当大