我正在尝试解决在查询ElasticSearch数千个结果时遇到的性能问题 . 基本思想是我们进行一些查询后处理并仅显示前X个结果(查询可能有~100000个结果,而根据我们的分数力学我们只需要前100个) .
基本机制如下:ElasticSearch得分在0..1(得分/最高(得分))之间归一化,我们加上我们的排名得分(也在0..1之间归一化)并除以2 .
我想做的是使用自定义评分(或者任何有效的东西)将此逻辑移动到ElasticSearch中:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-script-score
我面临的问题是使用分数脚本/分数函数我似乎找不到像max(_score)那样的方法来将0到1之间的分数标准化 .
"script_score" : {
"script" : "(_score / max(_score) + doc['some_normalized_field'].value)/2"
}
欢迎任何想法 .
1 回答
我不确定我理解你的问题 . 你想限制结果的数量吗?
你试过吗?
您可以使用sort来定义 sort 顺序,默认情况下它将按主查询排序 .
你也可以使用聚合(有或没有function_score)