我有一个具有多个标准的搜索。
每个标准(按 分组should
)具有不同的加权分数。
ElasticSearch 返回结果列表;每个都有一个分数 - 这对我来说似乎是一个任意的分数。这是因为我找不到那个分数的分母。
我的问题是 - 我如何将每个分数表示为一个比率?
将每个分数除以max_score
不起作用,因为它会将最佳匹配显示为与搜索条件 100% 匹配。
我有一个具有多个标准的搜索。
每个标准(按 分组should
)具有不同的加权分数。
ElasticSearch 返回结果列表;每个都有一个分数 - 这对我来说似乎是一个任意的分数。这是因为我找不到那个分数的分母。
我的问题是 - 我如何将每个分数表示为一个比率?
将每个分数除以max_score
不起作用,因为它会将最佳匹配显示为与搜索条件 100% 匹配。
计算_score
取决于使用的查询组合。例如,一个简单的查询,如:
{ "match": { "title": "search" }}
将使用 Lucene 的TFIDFSimilarity,结合:
词频(TF):这个词在本文档search
的字段中出现了多少次?title
次数越多,分数越高
逆文档频率(IDF):该词在索引中所有文档search
的字段中出现了多少次?title
次数越多,分数越低
场地规范:场地有多长title
?场地越长,得分越低。(较短的字段如title
被认为比较长的字段如body
.)
查询规范化因子。(可以忽略)
另一方面,这样的bool
查询:
"bool": {
"should": [
{ "match": { "title": "foo" }},
{ "match": { "title": "bar" }},
{ "match": { "title": "baz" }}
]
}
将计算_score
每个匹配的子句,将它们加在一起然后除以子句的总数(并再次应用查询规范化因子)。
因此,这完全取决于您使用的查询。
您可以通过将参数添加到查询中来获得有关如何_score
计算的详细说明:explain
curl localhost:9200/_search?explain -d '
{
"query": ....
}'
我的问题是 - 我如何将每个分数表示为一个比率?
如果不了解您希望查询做什么,就不可能回答这个问题。根据您的用例,您可以使用function_score
查询来实现自己的评分算法。