ElasticSearch,计算 _score 的前 25 个命中的第 75 个百分位数

问题描述 投票:0回答:1

在 ElasticSearch 中,我正在三个字段(Field1、Field2、Field3)中寻找 multi_match。我现在想在 elasticsearch aggs 函数中计算 _score 值的第 75 个。计算应该在 ElasticSearch 查询中进行

query = {
    "size": 25,
    "query": {
        "multi_match": {
            "query": "keyphrase",
            "fields": ["field1", "field2", "field3"]
        }
    },
    "aggs": {
        "percentile_score": {                     
            "percentiles": {
            "field": "_score",
            "percents": [ 75.0 ]
          }
        },
    }
}
responnse = client.search(index=INDEX_NAME, body = query)
for hit in responnse["hits"]["hits"]:
    print(f"Score: {hit['_score']}")

得分:9.517459 得分:8.774883 ... 分数:5.489334 得分:4.481924

响应[“聚合”][“percentile_score”][“值”][“75.0”]

我期望第 75 个百分位数返回给我,但我只得到值 None

elasticsearch aggregation percentile
1个回答
0
投票

首先我想提一下,聚合并不取决于您返回的点击量。您可以请求 0、10、100 或 1000 次点击,对于所有这些点击,您将获得完全相同的聚合结果。发生这种情况是因为聚合是在整个结果集上计算的,而不仅仅是您碰巧检索到的前 10 或 25 个命中。

第二个问题是运行基数聚合不受elasticsearch支持,并且在不久的将来不太可能得到支持。

我很乐意向您建议一些替代方案,但我不知道您期望 _score 的前 25 个命中的第 75 个百分位代表什么。换句话说,您想从这个数字中提取什么含义?它对你来说代表什么?

© www.soinside.com 2019 - 2024. All rights reserved.