我想要实现的是仅当查询中提供的日期在 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"
}
}
}
]
}
}
}
任何建议都会有很大帮助!
我怀疑
availability
需要是 nested
- 否则你的数组对象的值 会变平 并且你的 start
和 end
之间的连接会丢失。
简而言之,删除索引,更改映射,重新索引,然后使用类似的东西
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "units.availability",
"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"
}
}
}
]
}
}
}
}
]
}
}
}
顺便说一句,您可能还想考虑制作
units
本身 nested
——它们看起来也像独立的实体!