使用多个数字范围查询elasticsearch

时间:2014-06-30 06:59:11

标签: elasticsearch

{
  "query": {
    "filtered": {
      "query": {
        "match": {
          "log_path": "message_notification.log"
        }
      },
      "filter": {
        "numeric_range": {
          "time_taken": {
            "gte": 10
          }
        }
      }
    }
  },
  "aggs": {
    "distinct_user_ids": {
      "cardinality": {
        "field": "user_id"
      }
    }
  }
}

我必须运行此查询20次,因为我想知道以下每个阈值之上的通知时间 - [10,30,60,120,240,300,600,1200..]。现在,我正在运行一个循环并进行20次查询以获取此信息。

有没有更健全的方法来查询一次弹性搜索并获得分别落入这些阈值的范围?

1 个答案:

答案 0 :(得分:1)

你可能想要的是" range aggregation"。

这是可能的查询,您可以在其中添加更多范围或更改它们 -

{ "size": 0, "query": { "match": { "log_path": "message_notification.log" } }, "aggs": { "intervals": { "range": { "field": "time_taken", "ranges": [ { "to": 50 }, { "from": 50, "to": 100 }, { "from": 100 } ] }, "aggs": { "distinct_user_ids": { "cardinality": { "field": "user_id" } } } } } }