在弹性搜索中组合聚合

时间:2015-04-20 09:41:11

标签: elasticsearch

我有一些对象,其中一些按照' 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"
      }
    }
  }
}
'

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

1 个答案:

答案 0 :(得分:1)

您可以在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
          }
        }
      }
    }
  }
}
'