elasticsearch - 在 Elasticsearch 中按分数排序复合聚合结果
问题描述
弹性搜索版本:6.2.4
我现在通过以下方式获得了复合聚合的结果:
GET index/_search
{
"aggs": {
"my_buckets": {
"composite": {
"sources": [
{
"name": {
"terms": {
"field": "name.keyword"
}
}
}
]
}
}
},
"query":{
}
}
为简化问题,此处省略查询部分。
我可以得到如下结果:
"aggregations": {
"my_buckets": {
"buckets": [
{
"key": {
"name": "Bill Gates"
},
"doc_count": 1
},
{
"key": {
"name": "Steven Paul Jobs"
},
"doc_count": 1
},
{
"key": {
"name": "Gates Godar"
},
"doc_count": 1
}
]
}
}
我注意到搜索结果的顺序不是按查询字符串的来源(相似性)排序的。
我们如何实现按分数对复合聚合结果进行排序?
谢谢。
解决方案
我发现的唯一选择是使用管道 bucket_sort 聚合,使用读取分数的最大度量聚合中的值
{
"aggs": {
"myBuckets": {
"composite": {
"sources": []
},
"aggs": {
"mySort": {
"bucket_sort": {
"sort": [
{
"max_score": {
"order": "desc"
}
}
]
}
},
"max_score": {
"max": {
"script": "_score"
}
}
}
}
}
}
推荐阅读
- python - 测试经过训练的 python 模型时出现以下错误
- fortran - 如何在 do 循环中区分结果和前一个结果?
- python - 完成循环后使用 Selenium 关闭浏览器
- php - 方法 App\Http\Controllers\LanguagesController::index 不存在
- javascript - 多个盒子中的猫头鹰旋转木马,不同的陈列柜
- python - 将数据框列名从字符串转换为 int
- xbox - 我的 Xbox 上有很多帐户,我不知道哪个是哪个?需要帮助了解这个生态系统
- python - 具有多个自变量的 TensorFlow 预测示例
- node.js - Travis 不使用 lftp 上传文件
- javascript - 有没有办法在不输入数组 [somenumber] 的情况下获取数组内的特定对象?