弹性搜索得分差异

时间:2014-12-16 09:34:23

标签: elasticsearch lucene

我的弹性搜索群集中只有一条记录。它有文字“Foo Bar”。

当我在群集上运行以下查询时,score会出现0.11506979

{
  "size" : 100,
  "query" : {
        "query_string" : {
          "query" : "foo bar"
        }
      } 

}

但是,当我在群集上运行以下查询(请注意foo bar之后的*)时,score会出现0.9798734

{
  "size" : 100,
  "query" : {
        "query_string" : {
          "query" : "foo bar*"
        }
      } 
}

如果我添加*,为什么得分会更多?是不是只有一个文件可以匹配?

2 个答案:

答案 0 :(得分:1)

如果我添加*?

,为什么得分会更高

上述*匹配具有与通配符表达式匹配的字段(未分析)的文档。它匹配任何字符序列(包括空字符序列)

是否只有一个文档可供匹配?

这取决于您的索引分析器,您如何索引给定文档中的字段。如果您使用的是默认分析仪,那么ES将使用标准分析仪。要准确检查索引数据如何在ES内部存储,请执行this

此外,关于实际得分,您应该了解ES用于评分文档的内部机制。 This将帮助您更好地了解评分机制。

如有任何疑问,请随时提出进一步的问题。

由于

答案 1 :(得分:1)

当您使用像*这样的通配符时,使用ConstantScore策略进行评分,该策略仅考虑boost和queryNorm。因此分数会发生变化。通过参数explain=true查看您的分数是如何计算的。