elasticsearch function_score 返回意外分数

亚当·费舍尔

我在使用不同的方法时收到不同的 _scores,但我期待相同的结果。

第一种方法是使用 script_score,将 _score 与字段值相乘,并用 boost_mode = replace 用计算出的值替换最终 _score

   {
    "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 = multiply 来计算 _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?

拉胡尔

您的分数差异可能是由于查询规范化因子

查询规范化因子 (queryNorm) 尝试规范化查询,以便可以将一个查询的结果与另一个查询的结果进行比较。

尽管查询规范的目的是使来自不同查询的结果具有可比性,但它并不能很好地工作。相关性 _score 的唯一目的是按照正确的顺序对当前查询的结果进行排序。您不应该尝试比较来自不同查询的相关性分数。

现在,

乘法:查询分数和函数分数相乘

replace : 只使用函数分数,忽略查询分数

当您使用时boost_mode=multiply,查询分数被标准化,而当您使用时boost_mode=replace,分数被替换为function score,查询分数被忽略,因此查询分数没有标准化

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

elasticsearch-获得“ function_score”内的中间分数

ElasticSearch aggs with function_score

elasticsearch,function_score SearchPhaseExecutionException

在ElasticSearch中,排序如何与function_score交互?

在Elasticsearch中使用function_score时,是否在function_score对象内部或外部使用过滤器是否重要?

带有过滤器的ElasticSearch function_score查询

如何在Elasticsearch 5中向function_score查询添加过滤器

function_score尝试在Elasticsearch中使用排除索引中的字段

使用术语过滤器和 function_score 查询总是给出分数 0

“ function_score”的表现

elasticsearch ngram分析器返回意外结果

ES function_score中_score(相关性)的值范围是多少?

elasticsearch索引意外消失

为什么cross_val_score返回几个分数?

在Symfony中获得Elasticsearch分数

嵌套属性中使用function_score进行弹性搜索增强

Function_score在布尔查询中使用score_mode作为max,但是像sum一样工作?

Elasticsearch返回类型

ElasticSearch 返回 json 异常

ElasticSearch 函数分数查询(范围过滤)

为什么ElasticSearch没有显示分数?

Elasticsearch-收集项目的分数

Elasticsearch Painless从嵌套元素计算分数

ElasticSearch随机分数与提升相结合?

如何根据分数对 ElasticSearch 文档进行排名

Elasticsearch 以更复杂的方式组合分数

Elasticsearch NodeJS:如何返回结果

ElasticSearch 创建索引返回错误

Elasticsearch返回的结果少于SQL?