ElasticSearch:查询今天是否介于列表中的一系列开始和结束日期之间
ElasticSearch: Querying if today is between and series of start and end dates in list
如果我有一些数据的字段包含多组 start/end 日期.. 例如:
{
id: 1,
title: "My Title",
availability[{start: 01-01-2020, end: 01-05-2020},{start: 02-01-2020, end: 02-22-2020}]
}
是否可以在 elasticsearch 中构建一个查询来检查今天(或任何给定日期)是否属于列表中的任何 start/end 日期组合?
或者我是否需要以不同的方式构建我的数据才能使其正常工作?
以前,我只处理一个开始日期和一个结束日期,可以将它们存储为它们自己的字段并进行 gte、lte 组合检查。
更新:
如果我将它们添加为嵌套字段。例如:
"avails" : {
"type" : "nested",
"properties" : {
"availStart" : { "type" : "date" },
"availEnd" : { "type" : "date" }
}
}
如果我这样搜索:
{
"query": {
"nested" : {
"path" : "avails",
"query" : {
"term" : {
{ "range" : {"avails.start" : {"lte": "now"}}},
{ "range" : {"avails.end" : {"gt" : "now"}}}
}
}
}
}
}
它会针对每个嵌套记录和 return 具有匹配的子记录的任何父记录进行评估吗?
很高兴您选择了 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"
}
]
}
- 最后是查询。你的格式不正确——如果你想要一个逻辑与,你需要将
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"}}}
]
}
}
}
}
}
如果我有一些数据的字段包含多组 start/end 日期.. 例如:
{
id: 1,
title: "My Title",
availability[{start: 01-01-2020, end: 01-05-2020},{start: 02-01-2020, end: 02-22-2020}]
}
是否可以在 elasticsearch 中构建一个查询来检查今天(或任何给定日期)是否属于列表中的任何 start/end 日期组合?
或者我是否需要以不同的方式构建我的数据才能使其正常工作?
以前,我只处理一个开始日期和一个结束日期,可以将它们存储为它们自己的字段并进行 gte、lte 组合检查。
更新:
如果我将它们添加为嵌套字段。例如:
"avails" : {
"type" : "nested",
"properties" : {
"availStart" : { "type" : "date" },
"availEnd" : { "type" : "date" }
}
}
如果我这样搜索:
{
"query": {
"nested" : {
"path" : "avails",
"query" : {
"term" : {
{ "range" : {"avails.start" : {"lte": "now"}}},
{ "range" : {"avails.end" : {"gt" : "now"}}}
}
}
}
}
}
它会针对每个嵌套记录和 return 具有匹配的子记录的任何父记录进行评估吗?
很高兴您选择了 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"
}
]
}
- 最后是查询。你的格式不正确——如果你想要一个逻辑与,你需要将
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"}}}
]
}
}
}
}
}