【问题标题】:Elasticsearch date range check for nested array of date rangesElasticsearch 日期范围检查嵌套的日期范围数组
【发布时间】:2018-01-06 03:39:14
【问题描述】:

所有开发者,这是我在这里的第一个问题,请忽略我的错误。我正在做一个有预订清单的项目。这个列表有开始日期和结束日期,对于 elasticsearch,我已经将它们声明并索引为嵌套

"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) 在该范围内。谁能帮我解决检查可用性的逻辑,并且在搜索开始和结束日期范围内没有预订?

【问题讨论】:

  • 看起来字段名称的大小写不正确 - 文档中的 "Bookings.startDate" 与查询中的 "Bookings.StartDate"。结束日期相同。
  • 感谢您指出这一点,但是当我编辑要粘贴到此处的代码时,我忘了更改大小写。在实际代码中,两者的拼写相同
  • @Ravian :我面临同样的问题,日期范围在我的对象列表中无法正常工作。你能分享你的字段映射Bookings。它可以帮助我解决我的问题,无论我的映射是否正确。
  • 你能说得更具体些吗?你需要什么信息?我非常乐意帮助您使其正常工作。

标签: elasticsearch nested nest


【解决方案1】:

我最终在父对象内添加了一个额外的所有日期列表,即 BookingDates,我在每次预订/取消时更新它以添加和删除日期。对于弹性搜索,如果列表日期在搜索范围内,我只是检查过滤器。

{
  "bool": {
    "must_not": [
      {
        "range": {
          "BookingDates": {
            "gte": "2018-01-16T00:00:00+11:00",
            "lte": "2018-01-20T00:00:00+11:00"
          }
        }
      }
    ]
  }
}

如果有人有更好的方法请分享,我分享我的逻辑,因为我找不到这个/类似问题的答案。可能这可以帮助处于类似情况的人。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多