在使用不同的方法时,我会收到不同的_scores,但我希望得到相同的结果。
第一种方法是使用script_score,将_score与字段值相乘,将最终的_score替换为计算的_score,将boost_mode =替换
{
"function_score": {
"query": {
"multi_match": {
"query": "body",
"fields": ["title", "text", "keywords"],
"operator": "and"
}
},
"functions": [{
"script_score": {
"script": {
"lang": "groovy",
"inline": "_score * doc['power'].value"
}
}
}],
"boost_mode": "replace"
}
}
第二种方法是使用script_score只返回字段值,让引擎使用boost_mode =乘法计算_score。
{
"function_score": {
"query": {
"multi_match": {
"query": "body",
"fields": ["title", "text", "keywords"],
"operator": "and"
}
},
"functions": [{
"script_score": {
"script": {
"lang": "groovy",
"inline": "doc['power'].value"
}
}
}],
"boost_mode": "multiply"
}
}
为什么查询返回不同的_scores?
发布于 2017-03-06 04:21:34
你的分数的差异可能是因为查询归一化因子
查询归一化因子(queryNorm)是对查询进行规范化的尝试,以便将一个查询的结果与另一个查询的结果进行比较。
尽管查询规范的目的是使来自不同查询的结果具有可比性,但它并不能很好地工作。关联_score的唯一目的是按照正确的顺序对当前查询的结果进行排序。您不应该尝试比较来自不同查询的相关性分数。
现在,
乘:查询分数和函数分数相乘。 替换:只使用函数得分,忽略查询分数。
当您使用boost_mode=multiply
时,查询分数将被规范化,而当您使用boost_mode=replace
时,该分数将被替换为function score
,查询分数将被忽略,因此查询分数不会正常化。
https://stackoverflow.com/questions/42580152
复制相似问题