首页 文章

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

提问于
浏览
1

例如,我需要在弹性搜索中与过滤器聚合 . 我有资产,在弹性搜索中保存为文档

{
"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"
}

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

我试过这个查询

{
    "size":0,
   "query": {
     "nested": {
                  "path":"appPartner",
                  "query": {
                    "bool": {
                      "must": [
                        {"match": {"appPartner.id": "1"}}
                      ]
                    }
                  }
                }
   },
   "aggs": {
      "packs" : {
          "nested" : {
              "path" : "packs"
          }, 
           "aggs" : {
              "id" : {
                  "terms" : {
                      "field" : "packs.id"
                  }
              ,
              "aggs":{
                  "name":{
                    "terms" : {
                          "field" : "packs.name"
                      }
                  }
             }
             }
          }       

      }
   }
}

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

1 回答

  • 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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    

相关问题