在Elasticsearch中按分数排序以获取复合聚合结果

时间:2018-09-13 07:23:29

标签: 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
        }
        ]
       }
      }

我注意到,搜索结果的顺序未按查询字符串的来源(相似性)排序。

如何实现按分数对综合汇总结果进行排序?

谢谢。

1 个答案:

答案 0 :(得分:0)

我发现的唯一选择是使用管道bucket_sort聚合,该聚合使用读取得分的最大度量聚合中的值

{
  "aggs": {
    "myBuckets": {
      "composite": {
        "sources": []
      },
      "aggs": {
        "mySort": {
          "bucket_sort": {
            "sort": [
              {
                "max_score": {
                  "order": "desc"
                }
              }
            ]
          }
        },
        "max_score": {
          "max": {
            "script": "_score"
          }
        }
      }
    }
  }
}