弹性搜索中的术语和间隔聚合

Aggregation on terms and intervals in elasticsearch

我的文档如下:

{
    "uri" : "post:1130a8ef197882bc3ebd",
    "topic_list" : [
        "bye",
        "hello"
    ],
    "datetime" : "2010-06-06T22:08:49"
}

我想在 datetimetopic_list 上进行聚合查询。我想要的输出是告诉我在每个时间间隔内,有多少文档在 topic_list.

中有 hello 主题

我试过的是:

{
  "size": 0, 
  "aggs": {
    "test": {
      "terms": {
        "field": "topic_list"
        
      }
    }
  }
}

但输出只是告诉我有多少文档始终包含每个主题,而不是在时间间隔内。 我怎样才能创建这样的聚合?

您还需要补充两件事:

  1. 一个查询,将结果限制为包含主题“hello”的文档。如果您只对每个时间间隔的文档计数感兴趣,则不需要 topic_list 字段上的 terms 聚合
  2. a date_histogram aggregation 创建时间间隔

这里是查询:

{
  "size": 0,
  "query": {
    "term": {
      "topic_list": "hello"
    }
  },
  "aggs": {
    "intervals": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "1d"
      }
    }
  }
}