我正在尝试解决在查询 ElasticSearch 数千个结果时遇到的性能问题。基本思想是,我们进行一些查询后处理,并仅显示前 X 个结果(查询可能有 ~100000 个结果,而根据我们的评分机制,我们只需要前 100 个结果)。
基本机制如下:ElasticSearch 分数在 0..1 (score/max(score)) 之间标准化,我们添加排名分数(也在 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"
}
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法。