我需要获取特定日期的不同 ID的列表。我正在尝试将“聚合”与“过滤”一起使用。尝试了几种方法,但是没有用。什么是正确的格式?

  {
    "size": "1000",
    "_source": ["Id"],
    "query": {
      "range": {
        "@timestamp": {
          "gte": "2020-10-20T00:00:00",
          "lt": "2020-10-21T00:00:00"
        }
      }
    },
     "aggs": {
      "ids": {
        "terms": { "field": "Id.keyword" }
      }
    }
  }
我尝试过的另一种方式:
  {
    "size": "1000",
    "_source": ["Id"],
     "aggs": {
      "ids": {
        "filter": {
          "range": {
            "@timestamp": {
              "gte": "2020-10-20T00:00:00",
              "lt": "2020-10-21T00:00:00"
            }
          }
        },
        "terms": { "field": "Id.keyword" }
      }
    }
  }
这是@timestamp映射:
"@timestamp": {
   "type": "date",
   "format": "dateOptionalTime"
 }

最佳答案

实际上,第一种选择几乎是正确的。您只需要在查询中将大小设置为0,删除不需要的_source,并在术语聚合中将大小设置为1000:

{
  "size": "0",
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2020-10-20T00:00:00",
        "lt": "2020-10-21T00:00:00"
      }
    }
  },
  "aggs": {
    "ids": {
      "terms": {
        "field": "Id.keyword",
        "size": 1000
      }
    }
  }
}

08-19 01:02
查看更多