如何根据日期范围找到一个字段的不同值? Elasticsearch 6.3

时间:2019-05-03 11:57:39

标签: elasticsearch aggregation elasticsearch-6

我有一个字段cid,我需要找到它的不同值。 但是我希望那些cid满足我的日期范围约束。我的意思是,我希望在给定的时间范围内将不同的cid添加到我的Elasticsearch数据库中。

我尝试了许多方法,其中大多数仅返回所有值,并且不进行汇总。

{
    "aggs": {
        "daterange": {
            "range": {
                "field": "@timestamp",
                "ranges": [
                        {"from": "2019-05-02", "to": "2019-05-03"}
                    ]
            },
            "aggs": {
                "result": {
                    "terms": {
                        "field": "cid.keyword"
                    }
                }
            }
        }
    },
    "_source":"cid"
}

我期望cid的不同值,但是我得到的是符合时间范围的所有值。

更新:

将我的网址从/index/search?size=100更改为/index/search

后,Val的答案起作用

1 个答案:

答案 0 :(得分:3)

您需要这样做,例如,添加日期range作为查询以减少文档集,然后仅对属于该日期范围的文档运行terms聚合:

{
  "size": 0,
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2019-05-02",
        "lt": "2019-05-03"
      }
    }
  },
  "aggs": {
    "result": {
      "terms": {
        "field": "cid.keyword"
      }
    }
  }
}