我想要实现的是,只有当查询中提供的日期在1个单周期的范围内时才返回结果。现在我有一个查询部分工作,但它在可用性列表中的所有时段都进行查询。它匹配是因为存在一个小于或等于的开始日期 2020-12-25T00:00:00
存在一个大于或等于的结束日期 2020-12-22T00:00:00
.
我想要的是与下面提供的文档不匹配的查询,因为两个句点都与我输入的查询不匹配。
这是我的数据模型的一部分:
{
"units": [
{
"availability": [
{
"period": [
{
"start": "2020-09-12T00:00:00",
"end": "2020-10-31T00:00:00"
}
]
},
{
"period": [
{
"start": "2021-04-03T00:00:00",
"end": "2021-04-24T00:00:00"
}
]
}
]
}
]
}
这是我的elasticsearch查询:
{
"query": {
"bool": {
"must": [
{
"range": {
"units.availability.period.start": {
"lte": "2020-12-25T00:00:00"
}
}
},
{
"range": {
"units.availability.period.end": {
"gte": "2020-12-22T00:00:00"
}
}
}
]
}
}
}
任何建议都会大有帮助!
1条答案
按热度按时间7d7tgy0s1#
我怀疑
availability
必须是nested
--否则数组对象的值将变平,并且start
s&end
s迷路了。简言之,删除索引,更改Map,重新索引,然后按照
顺便说一句,你也可以考虑
units
他们自己nested
--它们看起来也像独立的实体!