首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回意外分数的elasticsearch function_score

返回意外分数的elasticsearch function_score
EN

Stack Overflow用户
提问于 2017-03-03 13:27:32
回答 1查看 266关注 0票数 1

在使用不同的方法时,我会收到不同的_scores,但我希望得到相同的结果。

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

代码语言:javascript
运行
复制
   {
    "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。

代码语言:javascript
运行
复制
   {
    "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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 04:21:34

你的分数的差异可能是因为查询归一化因子

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

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

现在,

乘:查询分数和函数分数相乘。 替换:只使用函数得分,忽略查询分数。

当您使用boost_mode=multiply时,查询分数将被规范化,而当您使用boost_mode=replace时,该分数将被替换为function score,查询分数将被忽略,因此查询分数不会正常化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42580152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档