Elasticsearch 中多个字段的术语聚合

Pio*_*ski 4 elasticsearch

我正在尝试从 Elasticsearch 获取一些数据。我有一个疑问:

GET index/_search
{
  "aggs": {
    "first-metadata": {
      "terms": {
        "field": "filters.metadata.first-metadata"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

作为回应,我得到了类似的信息:

"aggregations": {
  "first-metadata": {
    "buckets": [
      {
        "key": 87000,
        "doc_count": 2
      },
      {
        "key": 100000,
        "doc_count": 1
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

一切都如我所料。但问题是我有多种元数据类型:first-metadatasecond-metadata并且third-metadata我想要类似的东西:

"aggregations": {
  "first-metadata": {
    "buckets": [
      {
        "key": 87000,
        "doc_count": 2
      },
      {
        "key": 100000,
        "doc_count": 1
      }
    ]
  },
  "second-metadata": {
    "buckets": [
      {
        "key": 5555,
        "doc_count": 24
      },
      {
        "key": 2222,
        "doc_count": 14
      },
      {
        "key": 3333,
        "doc_count": 7
      }
    ]
  },
  "third-metadata": {
    "buckets": [
      {
        "key": 7777,
        "doc_count": 23
      },
      {
        "key": 3333,
        "doc_count": 11
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在一次聚合查询中实现这样的结果吗?

pkh*_*lop 5

很简单

POST index/_search
{
  "aggs": {
    "first-metadata": {
      "terms": {
        "field": "filters.metadata.first-metadata"
      }
    },
    "second-metadata": {
      "terms": {
        "field": "filters.metadata.second-metadata"
      }
    }

  }
}
Run Code Online (Sandbox Code Playgroud)