微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ElasticSearch:查询今天是否在列表中的一系列开始和结束日期之间

如何解决ElasticSearch:查询今天是否在列表中的一系列开始和结束日期之间

如果我有一些包含多组开始/结束日期的字段的数据......例如:

true

是否可以在 elasticsearch 中构建查询以检查今天(或任何给定日期)是否在列表中的任何开始/结束日期组合内?

或者我是否需要以不同的方式构建我的数据才能使其发挥作用?

以前,我只处理一个开始日期和一个结束日期,可以将它们存储为自己的字段并进行 gte、lte 组合检查。

更新:

如果我将它们添加为嵌套字段。例如:

{
     id: 1,title: "My Title",availability[{start: 01-01-2020,end: 01-05-2020},{start: 02-01-2020,end: 02-22-2020}]
}

如果我这样搜索

"avails" : {
    "type" : "nested","properties" : {
        "availStart" : { "type" : "date" },"availEnd" : { "type" : "date" }
    }
}

它会为每个嵌套记录评估它并返回具有匹配子记录的任何父记录吗?

解决方法

很高兴您选择了 nested 字段。现在您只需要确保映射、字段名称和查询都是一致的。

  1. 包含 format 的日期映射:
PUT myindex
{
  "mappings": {
    "properties": {
      "avails": {
        "type": "nested","properties": {
          "start": { "type": "date","format": "MM-dd-yyyy" },"end": { "type": "date","format": "MM-dd-yyyy" }
        }
      }
    }
  }
}
  1. 同步您的文档
POST myindex/_doc
{
  "id": 1,"title": "My Title","avails": [
    {
      "start":"01-01-2020","end": "01-05-2020"
    },{
      "start": "02-01-2020","end": "02-22-2020"
    }
  ]
}
  1. 最后是查询。你的格式不正确——如果你想要一个逻辑 AND,你需要将 range 查询包装在一个 bool + must 中:
POST myindex/_search
{
  "query": {
    "nested": {
      "path": "avails","query": {
        "bool": {
          "must": [
            { "range" : {"avails.start" : {"lte": "now"}}},{ "range" : {"avails.end" : {"gt" : "02-01-2020"}}}
          ]
        }
      }
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?