嵌套聚合聚合所有出现

时间:2016-09-15 13:08:30

标签: elasticsearch

我有一个包含多个对象的嵌套字段的索引,如:

{    
    "_id": "record1",    
    "testing_nes":[    
        {    
            "test_id": 123,    
            "test_status": "done"    
        },    
        {    
            "test_id": 981,    
            "test_status": "new"    
        },    
        {    
            "test_id": 234,    
            "test_status": "new"    
        },    
        {    
            "test_id": 987,    
            "test_status": "done"    
        }    
    ]    
},    
{    
    "_id": "record2",    
        "testing_nes":[    
        {    
            "test_id": 123,    
            "test_status": "new"    
        },    
        {    
            "test_id": 981,    
            "test_status": "new"    
        },    
        {    
            "test_id": 234,    
            "test_status": "new"    
        },    
        {    
            "test_id": 987,    
            "test_status": "new"    
        }    
    ]    
}

我希望通过test_status聚合和计算对象,但只能使用test_id = 987进行聚合和计数。此查询:

{
"query": {
    "bool": {
      "must": [
        {
          "match": {
            "testing_nes.test_id": "987"
          }
        }
      ]
    }
}, 
"aggs": {
    "statuses": {
      "terms": {
        "field": "testing_nes.test_status",
        "size": 10
      }
    }
}
}

计算所有嵌套对象,但我只想用test_id = 987

计算这些对象

1 个答案:

答案 0 :(得分:0)

试试这个

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "testing_nes",
            "filter": {
              "term": {
                "testing_nes.id": 987
              }
            }
          }
        }
      ]
    }
  },
  "size": 0,
  "aggs": {
    "count": {
      "nested": {
        "path": "testing_nes"
      },
      "aggs": {
        "testing_nes_status_new": {
          "terms": {
            "field": "testing_nes.test_status"
          },
          "aggs": {
            "top_reverse_nested": {
              "reverse_nested": {}
            }
          }
        }
      }
    }
  }
}

doc_dount将位于top_reverse_nested