Elasticsearch:开始和结束日期列表中的匹配范围

问题描述 投票:0回答:1

我想要实现的是仅当查询中提供的日期在 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"
                        }
                    }
                }
            ]
        }
    }
}

任何建议都会有很大帮助!

elasticsearch date-range
1个回答
2
投票

我怀疑

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
——它们看起来也像独立的实体!

© www.soinside.com 2019 - 2024. All rights reserved.