Elasticsearch 5 |过滤嵌套对象和嵌套聚合计数

时间:2017-02-10 22:56:03

标签: elasticsearch

elasticsearch 5.2

我希望通过嵌套对象state.id = 101过滤我的项目,并通过state.id对所有项目进行聚合计数。有些州有ID 101,102和103。

聚合计数现在仅限于state.id 101.我希望只获取state.id = 101的项目以及所有州ID的聚合计数。

我该怎么做?

GET index/items/_search
{
  "query": {
        "nested" : {
            "path" : "state",
            "query": {
              "bool": {
                "filter": {
                  "term": { "state.id": 101 }
                }
              }
            }
        }
  },
     "aggs" : {
        "state" : {
            "nested" : {
                "path" : "state"
            },
            "aggs" : {
                "count" : { "terms" : { "field" : "state.id" } }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你需要使用post_filter而不是查询:(哦,发送有效载荷时使用POST而不是GET)

POST index/items/_search
{
   "post_filter": {                         <--- change this
      "nested": {
         "path": "state",
         "query": {
            "bool": {
               "filter": {
                  "term": {
                     "state.id": 101
                  }
               }
            }
         }
      }
   },
   "aggs": {
      "state": {
         "nested": {
            "path": "state"
         },
         "aggs": {
            "count": {
               "terms": {
                  "field": "state.id"
               }
            }
         }
      }
   }
}

如果要进一步缩小嵌套聚合,还可以添加过滤器:

POST index/items/_search
{
   "post_filter": {
      "nested": {
         "path": "state",
         "query": {
            "bool": {
               "filter": {
                  "term": {
                     "state.id": 101
                  }
               }
            }
         }
      }
   },
   "aggs": {
      "narrow": {
         "filter": {
            "nested": {
               "path": "state",
               "query": {
                  "bool": {
                     "filter": {
                        "term": {
                           "state.id": 101
                        }
                     }
                  }
               }
            }
         },
         "aggs": {
            "state": {
               "nested": {
                  "path": "state"
               },
               "aggs": {
                  "count": {
                     "terms": {
                        "field": "state.id"
                     }
                  }
               }
            }
         }
      }
   }
}