【问题标题】:Elasticsearch word order弹性搜索词序
【发布时间】:2019-06-04 10:58:20
【问题描述】:
我已使用标准分析器为文档编制索引
foo 1 bar
foo 2 bar
foo 3 bar
等等……
当我进行像“asdf foo 1 bar 2”这样的马赫查询时,foo 2 bar 的得分高于 foo 1 bar,尽管查询字符串包含短语“foo 1 bar”
如何构建我的查询以考虑词序?主要问题是查询字符串可能包含比文档更多的单词。
【问题讨论】:
标签:
elasticsearch
elasticsearch-6
【解决方案1】:
您应该考虑使用“带状疱疹”。它们就像迷你短语,通过将相邻术语组合成对来帮助提高相关性。然后,如果您获得多个 shingle 匹配,则与另一个仅具有单个单词匹配的文档相比,这会提高您的相关性。
文档 1 的原件
"foo 1 bar"
文档 1 的带状疱疹
"foo 1", "1 bar"
因此,对于查询 asdf foo 1 bar 2,您将在 shingle foo 1 和 1 bar 上获得与查询的这些部分匹配的内容,这将增加第一个文档相对于第二个文档的相关性。
在Elasticsearch Docs了解更多关于带状疱疹的信息。
您可能应该为此字段创建多个字段映射,以便获得 shingles 以及标准文本分析的好处。该过程在文档中也有详细记录,如果遇到困难,您可以在此处创建另一个问题。