查询在弹性搜索中使用过滤器在嵌套字段上进行聚合

时间:2016-08-02 13:33:41

标签: elasticsearch

例如,我需要在弹性搜索中与过滤器聚合。 我将资源作为文档保存在弹性搜索中

undefined method `merge' for "email@123.com":String

这里的包在ES中被索引为嵌套类型。 包将有一个id,name和partnerId数组。 现在我想要的是在包装上与特定的partnerId聚合,就像我想要所有带有partnerId = 10的包一样。

我试过这个查询

{
"id":1,
"name":"1",
"url":"1png20160612115249190.png",
"description": "this is a good asset",
"alt_sizes": ["hi","yes"],
"tags":[{ "id":"1", "name":"Movies"},
    { "id":"2", "name":"Sports"}],
"packs":[{ "id":"1", "name":"pack1", "partnerId":"1"},
    { "id":"2", "name":"pack2 test", "partnerId":"2"}],
"category":[{ "id":"1", "name":"cat1"},
    { "id":"2", "name":"cat2"}],
"appPartner":[{ "id":"1", "name":"par1"},
        { "id":"2", "name":"par2"}],
"created_time":"2016-07-26 00:00:00",
"updated_time":"2016-07-26 10:45:43"
}

此查询为我提供了所有嵌套包ID的聚合。我需要聚合所有嵌套的包,使用partnerID =

1 个答案:

答案 0 :(得分:1)

  "aggs": {
    "packs": {
      "nested": {
        "path": "packs"
      },
      "aggs": {
        "partner": {
          "filter": {
            "term": {
              "packs.partnerId": "10"
            }
          },
          "aggs": {
            "id": {
              "terms": {
                "field": "packs.id"
              },
              "aggs": {
                "name": {
                  "terms": {
                    "field": "packs.name"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
相关问题