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

时间:2015-12-24 10:09:20

标签: python django elasticsearch django-haystack searchqueryset

如果我输入查询“apple”,我希望获得“xyzapplexyz”,“apple”,“applexyz”和 NOT 之类的结果,例如“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)

但他们都没有给出所需的结果。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您需要"xyzapplexyz"之类的结果,那么您需要使用ngram analyzer代替EdgeNGram,或者根据您的要求使用两者。 EdgeNGram仅从头开始生成令牌。

使用NGram apple

将成为术语 xyzapplexyz 的生成标记之一,假设为max_gram >=5,您将获得预期结果,同时{{ 1}}需要不同,否则你会得到奇怪的结果。

如果您有大量文本,search_analyzer index size可能会变得非常大