我在ElasticSearch 5.5中有一组文档,有两个日期字段:start_date和end_date。 我想将它们聚合成日期直方图桶(例如:每周),这样如果start_date&lt;周X < end_date,然后文档将在“第X周”桶中。 这意味着单个文档可能位于多个存储桶中。
考虑以下具体示例:我有一组描述公司员工的文档,并且每个员工都有雇用日期和(可选)终止日期。我想建立过去12个月的在职员工数量的日期直方图。
示例文档内容:
{
"start_date": "2013-01-12T00:00:00.000Z",
"end_date": "2016-12-08T00:00:00.000Z",
"id": "123123123"
}
有没有办法在ES中做到这一点?
答案 0 :(得分:1)
我找到了一种方法,使用过滤器聚合( https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-filter-aggregation.html)。如果我需要12个尾随月报告,那么我将创建12个桶,其中每个桶定义过滤条件,例如:
"bool":{
"must":[{
"range":{
"start_date":{
"lte":"2016-01-01T00:00:00.000Z"
}
}
},{
{
"range":{
"end_date":{
"gt":"2016-02-01T00:00:00.000Z"
}
}
}]
}
但是,我觉得如果有一种更简单的方法可以做到这一点会很好,因为如果我想说尾随365天,这意味着我必须创建365个桶式过滤器,这会使得查询结果非常大。
答案 1 :(得分:-1)
我知道这个问题已经很老了,但是由于它仍然是开放的,所以我要分享我的知识。同样,这个问题并没有明确说明预期的输出是什么,但是我仍然认为可以使用“日期直方图聚合”和“桶脚本聚合”来实现。
以下是这两种汇总的文档链接。