【发布时间】:2016-01-18 17:14:37
【问题描述】:
我正在尝试解决我们在查询 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"
}
欢迎提出任何想法。
【问题讨论】:
-
请在这里解释你的逻辑。也许这可以在没有任何脚本的纯弹性搜索中完成。
-
你得到这个问题的答案了吗?过去一段时间我有点陷入同样的困境。
-
您好!你得到答案了吗?我正试图弄清楚我与它有什么关系!
标签: elasticsearch