【发布时间】:2021-02-15 04:43:59
【问题描述】:
我想在 ElasticSearch 中存储与时间相关的数据。 每个文档都有一个开始时间和一个结束时间,它们定义了它的相关时间(例如打开的工单)。 然后我希望能够运行以下查询:
- 显示 1 月 5 日至 2 月 2 日期间开放的所有门票。
- 在多个字段中显示在某个时间范围内打开的所有工单的构面
由于我将有每月索引,因此跨越一个月的文档将存储在多个索引中。
例如,在 1 月和 4 月之间打开的工单需要存储在所有 4 个月索引的索引中。
我想知道是否有一种简单的方法可以稍后在跨索引的聚合上运行,它会知道每张票只考虑一次(用于分面等)。
例如,如果我有以下票:
- 门票 A 在 2021 年 1 月 1 日至 2021 年 1 月 1 日之间开放
- 门票 B 在 15/1/2021-16/2/2021 之间开放
- 门票 C 于 2021 年 12 月 1 日至 2021 年 16 月 3 日之间开放
我们将有以下文件/索引:
Index January:
{id: A, StartDate: 1/1/2021, EndDate: 17/1/2021}
{id: B, StartDate: 15/1/2021}
{id: C, StartDate: 12/1/2021}
Index February:
{id: B, StartDate: 15/1/2021, EndDate: 16/2/2021}
{id: C, StartDate: 12/1/2021}
Index March:
{id: C, StartDate: 12/1/2021, endDate: 16/3/2021}
欢迎任何与使用 ElasticSearch 实现此类事情的最佳方式相关的意见。 如果还有其他首选数据库可以用于具有高规模和快速聚合的工作,我也很乐意听到替代方案。
【问题讨论】:
-
跨越多个月的文档看起来如何?另外,在未创建或关闭票证的月份(2 月、3 月)内,您会存储什么?
-
添加了一些示例数据来回答您的问题。 @Joe Sorocin
标签: elasticsearch elasticsearch-aggregation