【问题标题】:Elasticsearch query to check date range not in date arrayElasticsearch查询检查日期范围不在日期数组中
【发布时间】:2015-09-19 18:24:29
【问题描述】:

我有一个“reservations”字段,它存储了一个项目已被保留的日期数组。

样本数据:

{
   reservations: [ "05/03/2015",
                   "05/04/2015",
                   "05/05/2015",
                   "05/18/2015",
                   "05/19/2015"
                  ]
}

我想在弹性搜索中搜索一个日期范围并返回所有不包含落在这些日期的日期的项目。

所以我有一个 startDateendDate 参数要搜索。但是,elasticsearch 的日期范围过滤器不符合此要求。我可以通过其他方式做到这一点吗?

编辑:

我认为日期范围过滤器不起作用,因为您只能将startDateendDategtelt 与右侧的一个值进行比较。我基本上在左边有一堆日期(开始/结束日期范围)需要检查,右边有一堆日期(多个预订日期)。

【问题讨论】:

  • 为什么日期范围不起作用?你能提供更多细节吗?听起来你尝试了一些东西但没有用
  • @AndreiStefan 我实际上是从一种不同的方式开始处理这个问题 (stackoverflow.com/questions/29820179/…)。但我简化了存储保留日期的方式 - 以纯数组形式。但我认为日期范围过滤器不起作用,因为您只能将startDateendDategtelt 与右侧的一个值进行比较。我基本上在左边有一堆日期(开始/结束日期范围)需要检查,右边有一堆日期(多个预订日期)。
  • @AyrtonSenna 你找到解决办法了吗?
  • @musa 不是真的,什么都没有。我只是在弹性搜索发回结果后通过在前端对结果进行排序来使用一种解决方法。 (不理想)

标签: arrays date search elasticsearch lucene


【解决方案1】:

这个问题可以通过使用嵌套对象来解决。将预订作为嵌套对象转换为主文档,然后范围查询将起作用。

例子

{
  reservation : [
    {"thedate" : "2015-01-01"}, 
    {"thedate" : "2015-03-12"},
    ...
  ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多