我正在尝试满足一个要求,客户希望从elasticsearch中选择数据并获得按日期间隔划分的文档计数,该间隔可能会更改。
[1]:https://imgur.com/qiUBHOw-我要选择所有在给定间隔(1.1-31.1。)中具有开始/结束位置的文档
[2]:https://imgur.com/a/KlWMk2w-所需结果示例(木纹图表)
我有看起来像这样的文档,每个文档都有startDate和(可选)endDate-这意味着请求尚未完成。
(task.time.start: [* TO now-1d/d] && task.time.complete: [now-1d/d TO now/d]) || (task.time.start: [now-1d/d TO now/d] && task.time.complete: [now/d TO *]) || (task.time.start: [now-1d/d TO now/d] && task.time.complete: [now-1d/d TO now/d]) || (task.time.start: [now-1d/d TO now/d])
到目前为止,我已经提出了以下Lucene查询,但是它们具有硬编码的日期范围(这就是我要摆脱的范围)
(task.time.start: [* TO now-2d/d] && task.time.complete: [now-2d/d TO now-1d/d]) || (task.time.start: [now-2d/d TO now-1/d] && task.time.complete: [now-1d/d TO *]) || (task.time.start: [now-2d/d TO now-1d/d] && task.time.complete: [now-2d/d TO now-1d/d]) || (task.time.start: [now-2d/d TO now-1d/d])
jQuery.globaleval()
...
,以此类推。这似乎工作得很好,但这是非常不切实际的。如果我们想要的间隔例如是一个月,则需要为该月的每一天修改这些过滤器。如果有人想按过去一年的月份查看数据,则需要创建一组新的查询。
有更简单的方法吗?