Joh*_*nyM 28 lucene search-engine elasticsearch
Idealy什么,我想实现的是权重分配给查询,使得QUERY1构成了最终得分的30%,QUERY2 consitutes其他70%,这样就实现文档有可能对QUERY1和QUERY2最高分的最高分.我对文档的研究没有提供任何关于如何实现这一点的提示,所以让我们尝试解决一个更简单的问题.
考虑以下形式的查询:
{
"query": {
"bool": {
"should": [
{
"function_score": {
"query": {"match_all": {}},
"script_score": {
"script": "<some_script>",
}
}
},
{
"match": {
"message": "this is a test"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
该脚本可以返回任意数字(想想 - >它可以返回类似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"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个答案不是你的问题的正确解决方案,但我认为你可以使用此查询来获得所需的结果.我给你的建议是使用explain api,尝试理解返回的内容,检查影响最终得分的参数,并使用脚本和提升值来获得优化的解决方案.
顺便说一句,"rescore查询"可能有助于在最终得分上获得%30-%70比率: 官方文档
| 归档时间: |
|
| 查看次数: |
4321 次 |
| 最近记录: |