Elasticsearch - 按列聚合

时间:2016-10-17 13:41:35

标签: elasticsearch aggregate

是否有可能将一列拆分为几个单独的字段? 例如,我有一些带有整数值的列,我想根据这一列创建几个字段:

1. 0-10
2. 11-20
3. 21-

此外,我想计算每个日期以上每个列的记录。

应该如此:

  date     | 0-10 | 11-20 | 21-
-------------------------------
2016-10-04 | 5    | 10    | 20
2016-10-05 | 7    | 15    | 33
...

我试图使用带有elasticsearch插件的Kibana和Jasper Report工具来做这件事,我只有这样的事情:

    date   | range | count
---------------------------
2016-10-04 | 0-10  | 5
2016-10-04 | 11-20 | 10 
2016-10-04 | 21-   | 20
2016-10-05 | 0-10  | 7
2016-10-05 | 11-20 | 15
2016-10-05 | 21-   | 33

被修改 我正在尝试这个:

{
  "size": 0,
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "*",
          "analyze_wildcard": true
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "dateTime": {
                  "gte": 1445074439703,
                  "lte": 1476696839703,
                  "format": "epoch_millis"
                }
              }
            }
          ],
          "must_not": []
        }
      }
    }
  },
  "aggs": {
    "2": {
      "date_histogram": {
        "field": "dateTime",
        "interval": "1d",
        "time_zone": "Europe/Berlin",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1445074439703,
          "max": 1476696839703
        }
      },
      "aggs": {
        "3": {
          "range": {
            "field": "milisecElapsed",
            "ranges": [
              {
                "from": 0,
                "to": 200
              },
              {
                "from": 200,
                "to": 990
              },
              {
                "from": 990
              },
              {
                "from": 200
              },
              {
                "from": 0
              }
            ],
            "keyed": true
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

查看Date Histogram AggregationsRange Aggregations的Elasticsearch文档,我认为您可以将范围聚合嵌套在每日直方图中。像这样:

{
  "aggs": {
    "by_day": {
      "date_histogram": {
        "field":     "date",
        "interval":  "day"
      },
      "aggs": {
        "integer_ranges": {
          "range": {
            "field": "your_integer_column_name"
            "ranges": [
              { "to": 10,
              { "from": 11, "to": 20 }
              { "from": 21 }
            ]
          }
        }
      }
    }
  }
}

这应该返回一个包含指定范围的嵌套文档计数的天数列表。

由于我不知道整数属性名称的名称,因此您需要将your_integer_column_name替换为文档中的ES属性。

希望没有任何遗漏的括号。

让我知道这是否让你更接近你的想法:)