Elasticsearch复杂聚合一个嵌套值减去第二个嵌套值并按第三个嵌套值分组

时间:2019-09-24 14:23:04

标签: elasticsearch aggregation

我真的很困惑。

我创建了一个嵌套结构,其中包含三种类型的数据, addfields 是具有属性的嵌套数据类型:

  • id 输入整数

  • 类型文本字段数据 true

  • value_numeric 类型 double

弹性内的数据如下:

{
  "_index": "item",
  "_type": "_doc",
  "_source": {
    "id": 1,
    "addfields": [
      {
        "id": 1,
        "value_numeric": 10
      },
      {
        "id": 2,
        "value_numeric": 10
      },
      {
        "id": 3,
        "value": "Daniel"
      },
    ]
  },
}
------------------------------------------------------------------------------------
{
  "_index": "item",
  "_type": "_doc",
  "_source": {
    "id": 2,
    "addfields": [
      {
        "id": 1,
        "value_numeric": 150
      },
      {
        "id": 2,
        "value_numeric": 100
      },
      {
        "id": 3,
        "value": "Daniel"
      },
    ]
  },
}
------------------------------------------------------------------------------------
{
  "_index": "item",
  "_type": "_doc",
  "_source": {
    "id": 2,
    "addfields": [
      {
        "id": 1,
        "value_numeric": 250
      },
      {
        "id": 2,
        "value_numeric": 200
      },
      {
        "id": 3,
        "value": "Richard"
      },
    ]
  },
}

我想像这样汇总这些数据

添加字段[1] - 添加字段[2] ,并按添加字段[3]

我尝试按以下方式使用 bucket_script ,但进展并不顺利。

{
  "size": 0,
  "aggs": {
    'nested' => [
        'path' => 'addfields',
    ],
    "addfields": {
      "aggs": {
        "leftfield": {
          "filter": {
            "bool": {
                "must": {
                    {
                        "match": {"addfields.id": 1}
                    }
                }
            }
          },
          "aggs": {
            "values": {
                "terms": {
                    "field": "value_numeric",
                    "size": 9999
                }
            }
          }
        },
        "rightfield": {
            "filter": {
            "bool": {
                "must": {
                    {
                        "match": {"addfields.id": 2}
                    }
                }
            }
          },
          "aggs": {
            "values": {
                "terms": {
                    "field": "value_numeric",
                    "size": 9999
                }

        },
        "calculate": {
          "bucket_script": {
            "buckets_path": { 
              "left": "leftfield",
              "right": "rightfield"
            },
            "script": {
              "source": "params.leftfield - params.rightfield"
            }
          }
        }
      }
    }
  }
}

0 个答案:

没有答案