"Bookings":[{
"StartDate":"2017-01-10T10:00:00+11:00",
"EndDate":"2017-01-15T21:30:00+11:00"
},{
"StartDate":"2017-01-20T10:00:00+11:00",
"EndDate":"2017-01-25T00:00:00+11:00"
}]
但是当我尝试检查可用性时,结果不符合预期,这里是我正在运行的elasticsearch的json
{
"from": 0,
"size": 12,
"_source": [
"Id",
"Bookings"
],
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "Bookings",
"query": {
"bool": {
"must_not": [
{
"bool": {
"must": [
{"range": {"Bookings.StartDate": {"gte": "2018-01-06T00:00:00+11:00"}}},
{"range": {"Bookings.EndDate": {"lte": "2018-01-09T00:00:00+11:00"}}}
]
}
}
]
}
}
}
}
]
}
}
}
当搜索日期为06-01-2018(startDate)和09-01-2018(endDate)时,结果很好,但是当我将日期更改为06-01-2018(startDate)和11-01-2018(endDate)时)结果出错了但是根据嵌套逻辑,它应该给我一个预订,从10-01-2018到15-01-2018,因为endDate(11-01-2018)属于该范围。任何人都可以帮我修复逻辑以检查可用性,没有预订在搜索开始和结束日期范围内?
答案 0 :(得分:0)
我最后在父对象中添加了一个额外的所有日期列表,即我在每次预订/取消时更新的BookingDates,以添加和删除日期。对于弹性搜索,我只是在列表日期落在搜索范围内时检查过滤器。
{
"bool": {
"must_not": [
{
"range": {
"BookingDates": {
"gte": "2018-01-16T00:00:00+11:00",
"lte": "2018-01-20T00:00:00+11:00"
}
}
}
]
}
}
如果有人有更好的方法请分享,我正在分享我的逻辑,因为我没有找到这个/类似问题的答案。可能这可以帮助处于类似情况的人。