Elasticsearch 词序

Elasticsearch word order

我使用标准分析器为文档编制了索引

foo 1 bar
foo 2 bar
foo 3 bar

等等..

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

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

您应该考虑使用 "shingles"。它们就像迷你短语,通过将相邻的术语分组成对来帮助提高相关性。然后,如果您获得多个带状匹配项,那么与另一个只有单个单词匹配项的文档相比,您的相关性会提高。

文档 1 的原件

"foo 1 bar"

文档 1 的带状疱疹

"foo 1", "1 bar"

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

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

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