我的搜索有多个标准。
每个标准(按should
分组)具有不同的加权分数。
ElasticSearch返回结果列表;每个都有一个分数 - 这对我来说似乎是一个任意分数。这是因为我无法找到该分数的分母。
我的问题是 - 如何将每个分数表示为一个比例?
将每个分数除以max_score
将无效,因为它会将最佳匹配显示为与搜索条件100%匹配。
答案 0 :(得分:1)
_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
query来实施自己的评分算法。