Elasticsearch 词序

vrm*_*vrm 3 elasticsearch elasticsearch-6

我已经使用标准分析器对文档进行了索引

foo 1 bar
foo 2 bar
foo 3 bar
Run Code Online (Sandbox Code Playgroud)

等等..

当我进行像“ asdf foo 1 bar 2 ”这样的 mach 查询时,尽管查询字符串包含短语“foo 1 bar”,但foo 2 bar的得分高于foo 1 bar

如何构建查询以考虑词序?主要问题是查询字符串可能包含比文档更多的单词。

dmb*_*man 6

您应该考虑使用“带状疱疹”。它们就像迷你短语一样,通过将相邻术语分组来帮助提高相关性。然后,如果您获得多个木瓦匹配,那么与另一个仅具有单个单词匹配的文档相比,这会提高您的相关性。

文档 1 的原始版本

"foo 1 bar"
Run Code Online (Sandbox Code Playgroud)

文档 1 的带状疱疹

"foo 1", "1 bar"
Run Code Online (Sandbox Code Playgroud)

因此,对于查询asdf foo 1 bar 2,您将在木瓦上foo 1以及1 bar查询的那些部分获得匹配项,这将增加第一个文档相对于第二个文档的相关性。

在Elasticsearch 文档中了解有关带状疱疹的更多信息。

您可能应该为此字段创建多个字段映射,以便获得 shingles 以及标准文本分析的好处。该过程在文档中也有详细记录,如果您遇到困难,可以在此处创建另一个问题。