我的弹性搜索群集中只有一条记录。它有文字“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*"
}
}
}
如果我添加*,为什么得分会更多?是不是只有一个文件可以匹配?
答案 0 :(得分:1)
如果我添加*?
,为什么得分会更高上述*匹配具有与通配符表达式匹配的字段(未分析)的文档。它匹配任何字符序列(包括空字符序列)
是否只有一个文档可供匹配?
这取决于您的索引分析器,您如何索引给定文档中的字段。如果您使用的是默认分析仪,那么ES将使用标准分析仪。要准确检查索引数据如何在ES内部存储,请执行this。
此外,关于实际得分,您应该了解ES用于评分文档的内部机制。 This将帮助您更好地了解评分机制。
如有任何疑问,请随时提出进一步的问题。
由于
答案 1 :(得分:1)
当您使用像*这样的通配符时,使用ConstantScore策略进行评分,该策略仅考虑boost和queryNorm。因此分数会发生变化。通过参数explain=true
查看您的分数是如何计算的。