gpt4 book ai didi

lucene - Elasticsearch - 结合常规查询和 function_score 时如何规范化分数?

转载 作者:行者123 更新时间:2023-11-29 02:43:24 25 4
gpt4 key购买 nike

理想情况下,我想要实现的是为查询分配权重,使查询 1 占最终分数的 30%,查询 2 占其他 70%,因此要获得最大分数,文档必须在查询 1 上获得最高分数,并且查询2。我对文档的研究没有给出任何关于如何实现这一点的提示,所以让我们尝试解决一个更简单的问题。

考虑以下形式的查询:

{
"query": {
"bool": {
"should": [
{
"function_score": {
"query": {"match_all": {}},
"script_score": {
"script": "<some_script>",
}
}
},
{
"match": {
"message": "this is a test"
}
}
]
}
}
}

脚本可以返回任意数字(想想->它可以返回类似 12392002 的东西)。

如何确保脚本的结果不会支配总分?

有什么办法可以正常化吗?例如,而不是脚本分数返回 max_script_score 的比率(由得分最高的文档实现)?

最佳答案

最近我也在研究这样的问题。我找不到关于此问题的任何正式文档,但是当我使用“explain api”调查结果时,似乎“queryNorm”并未直接应用于来自“functions”字段的分数。这意味着您不能直接规范化脚本值。

但是,我想我找到了解决这个问题的一个有点棘手的方法。如果您将此函数字段与您所做的查询(match_all 查询)结合起来并提升该查询,则规范化正在处理此查询,即这两个分数的乘积 - 来自规范化查询和来自脚本 - 将为我们提供完全正常化。为了更好的解释查询将是这样的:

{
"query": {
"bool": {
"should": [
{
"function_score": {
"query": {"match_all": {"boost":1}},
"functions": [ {
"script_score": {
"script": "<some_script>",
}}],
"score_mode": "sum",
"boost_mode": "multiply"
}
},
{
"match": {
"message": "this is a test"
}
}
]
}
}
}

这个答案不是您问题的正确解决方案,但我认为您可以使用此查询来获得所需的结果。我对您的建议是使用 explain api,尝试了解它返回的内容,检查影响最终得分的参数并使用脚本和提升值来获得优化的解决方案。

顺便说一句,“rescore 查询”可能有助于获得最终分数的 %30-%70 比率: Official documentation

关于lucene - Elasticsearch - 结合常规查询和 function_score 时如何规范化分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25361795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com