在 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
首先我想提一下,聚合并不取决于您返回的点击量。您可以请求 0、10、100 或 1000 次点击,对于所有这些点击,您将获得完全相同的聚合结果。发生这种情况是因为聚合是在整个结果集上计算的,而不仅仅是您碰巧检索到的前 10 或 25 个命中。
第二个问题是运行基数聚合不受elasticsearch支持,并且在不久的将来不太可能得到支持。
我很乐意向您建议一些替代方案,但我不知道您期望 _score 的前 25 个命中的第 75 个百分位代表什么。换句话说,您想从这个数字中提取什么含义?它对你来说代表什么?