如何解决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
字段。现在您只需要确保映射、字段名称和查询都是一致的。
- 包含
format
的日期映射:
PUT myindex
{
"mappings": {
"properties": {
"avails": {
"type": "nested","properties": {
"start": { "type": "date","format": "MM-dd-yyyy" },"end": { "type": "date","format": "MM-dd-yyyy" }
}
}
}
}
}
- 同步您的文档
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"
}
]
}
- 最后是查询。你的格式不正确——如果你想要一个逻辑 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 举报,一经查实,本站将立刻删除。