我在elasticsearch中存储以下信息:
{ "timeslot_start_at" : "2013-02-01", "timeslot_end_at" : "2013-02-03" }
假设我还有另一个日期范围(例如,从用户输入中得出),我想搜索一个相交的时间范围。与此类似:确定两个日期范围是否重叠这概述了以下逻辑:
(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)
但是我不确定如何将其放入elasticsearch查询中,我会使用范围过滤器并且仅将“ to”值设置为,而将from留为空白吗?还是有一种更有效的方法?
更新:现在可以使用在elasticsearch v5.2中添加的date_range数据类型。对于elasticsearch的早期版本,以下解决方案仍然适用。
要测试交集,您应该使用布尔查询将两个范围查询合并为一个查询:
{ "bool": { "must": [ { "range": { "timeslot_start_at": { "lte": "2013-02-28" } } }, { "range": { "timeslot_end_at": { "gte": "2013-02-03" } } } ] } }