我有一些对象按“masterID”分组。我需要一个聚合/查询来向我显示按“masterID”每个对象组具有最高“相关性”的对象。

通过聚合术语“masterID”,我可以获得每个“masterID”的存储桶。但是,如何在每个存储桶中获得最高的“相关性”对象?

到目前为止的查询是:

curl -XGET 'http://localhost:9200/pwo/_search?search_type=count&size=0&pretty=true' -d '{
  "aggregations": {
    "masterIDs": {
      "terms": {
        "field": "masterID",
        "size": 0
      }
    }
  }
}
'


curl -XGET 'http://localhost:9200/pwo/_search?size=0&pretty=true' -d '{
  "aggregations": {
    "relevance": {
      "max": {
        "field": "relevance"
      }
    }
  }
}
'

有没有办法通过单个查询解决此问题?

最佳答案

您可以在masterIDs块中添加相关性聚合块,如下所示:

curl -XGET 'http://localhost:9200/pwo/_search?size=0&pretty=true' -d '{
  "aggregations": {
    "masterIDs": {
      "terms": {
        "field": "masterID",
        "size": 0
      },
      "aggregations": {
        "relevance": {
          "max": { "field" : "relevance" }
        },
        "aggregations": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}
'

10-07 21:01