我在弹性搜索中存储类似以下信息的信息:
{ "timeslot_start_at" : "2013-02-01", "timeslot_end_at" : "2013-02-03" }
鉴于我有另一个日期范围(例如,从用户输入给出),我想搜索相交的时间范围。与此类似:确定两个日期范围是否重叠 https://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap其中概述了以下逻辑是我所追求的:
(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)
但我不确定如何将其适合弹性搜索查询,我是否会使用范围过滤器并仅设置“to”值,将 from 留空?或者有更有效的方法来做到这一点吗?
更新:现在可以使用日期范围 https://www.elastic.co/guide/en/elasticsearch/reference/5.2/range.html在elasticsearch v5.2中添加的数据类型。对于早期版本的elasticsearch,以下解决方案仍然适用。
要测试交集,您应该使用 bool 查询将两个范围查询合并为一个查询:
{
"bool": {
"must": [
{
"range": {
"timeslot_start_at": {
"lte": "2013-02-28"
}
}
},
{
"range": {
"timeslot_end_at": {
"gte": "2013-02-03"
}
}
}
]
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)