我可以通过聚合获得干净的数据结构吗

时间:2019-09-04 15:51:00

标签: elasticsearch

我正在尝试创建一个聚合,但是结果因元数据而metadata肿,不适合我的用例。

这是我的汇总定义;

"aggs": {
  "attributes": {
    "nested": {
      "path": "attributes"
    },
    "aggs": {
      "facet_name": {
        "terms": {
          "field": "attributes.name.keyword"
        },
        "aggs": {
          "facet_value": {
            "terms": {
              "field": "attributes.value.keyword"
            }
          }
        }
      }
    }
  }
},

我尝试获取与此类似的数据结构;

[{
  "name": "Materiał",
  "values": ["stal", "drewno"...] 
},
{
  "name": "Kolor",
  "values": ["czarny", "kolorowy"...]
]

代替下面的结果集是当前的聚合响应;

"aggregations" : {
    "attributes" : {
      "doc_count" : 142307,
      "facet_name" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 38074,
        "buckets" : [
          {
            "key" : "Materiał",
            "doc_count" : 21811,
            "facet_value" : {
              "doc_count_error_upper_bound" : 0,
              "sum_other_doc_count" : 4977,
              "buckets" : [
                {
                  "key" : "stal",
                  "doc_count" : 3141
                },
                {
                  "key" : "drewno",
                  "doc_count" : 2944
                },
                {
                  "key" : "szkło",
                  "doc_count" : 2885
                },
                {
                  "key" : "tworzywo sztuczne",
                  "doc_count" : 1529
                },
                {
                  "key" : "metal",
                  "doc_count" : 1303
                },
...

这是我能得到的最接近的结果。

我找不到如何重组结果对象或从聚合中删除元数据的方法。

1 个答案:

答案 0 :(得分:1)

不幸的是,您无法更改响应主体的结构来实现所需的结果。这就是Elasticsearch REST API的实现方式。

您将不得不遍历buckets数组并通过提取特定值来创建自己的结构/对象。