【问题标题】:Elasticsearch date range intersectionElasticsearch 日期范围交集
【发布时间】:2013-05-28 17:07:28
【问题描述】:

我在弹性搜索中存储了以下信息:

{ "timeslot_start_at" : "2013-02-01", "timeslot_end_at" : "2013-02-03" }

鉴于我有另一个日期范围(例如从用户输入给出),我想搜索一个相交的时间范围。与此类似:Determine Whether Two Date Ranges Overlap 其中概述了以下逻辑是我所追求的:

(StartDate1 <= EndDate2) and (StartDate2 <= EndDate1)

但我不确定如何将其放入弹性搜索查询中,我是否会使用范围过滤器并仅设置“to”值,而将 from 留空?或者有更有效的方法吗?

【问题讨论】:

  • 用户输入范围是否应该完全被文档时间范围“覆盖”,还是它们只是部分重叠?

标签: elasticsearch


【解决方案1】:

更新:现在可以使用在 elasticsearch v5.2 中添加的 date_range 数据类型。对于早期版本的 elasticsearch,以下解决方案仍然适用。

要测试交集,您应该使用 bool 查询将两个范围查询合并为一个查询:

{
    "bool": {
        "must": [
            {
                "range": {
                    "timeslot_start_at": {
                        "lte": "2013-02-28"
                    }
                }
            },
            {
                "range": {
                    "timeslot_end_at": {
                        "gte": "2013-02-03"
                    }
                }
            }
        ]
    }
}

【讨论】:

  • 如果您想从结果中排除相交的日期范围怎么办?我希望“must_not”可以工作,但事实并非如此。
  • @Necoras 谢谢!好收获!
猜你喜欢
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多