使用 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
可能会变得相当大
如果我输入查询 "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
可能会变得相当大