Elasticsearch:开始日期和结束日期列表中的匹配范围
Elasticsearch: Match range in list of start and end dates
如果查询中提供的日期在 1 个周期范围内,我想要实现的是仅 return 结果。现在我有一个部分有效的查询,但它查询可用性列表中的所有时间段。它匹配是因为开始日期小于或等于 2020-12-25T00:00:00
并且结束日期大于或等于 2020-12-22T00:00:00
.
我想要的是与下面提供的文档不匹配的查询,因为两个句点都不匹配我输入的查询。
这是我的数据模型的一部分:
{
"units": [
{
"availability": [
{
"period": [
{
"start": "2020-09-12T00:00:00",
"end": "2020-10-31T00:00:00"
}
]
},
{
"period": [
{
"start": "2021-04-03T00:00:00",
"end": "2021-04-24T00:00:00"
}
]
}
]
}
]
}
这是我现在的 Elasticsearch 查询:
{
"query": {
"bool": {
"must": [
{
"range": {
"units.availability.period.start": {
"lte": "2020-12-25T00:00:00"
}
}
},
{
"range": {
"units.availability.period.end": {
"gte": "2020-12-22T00:00:00"
}
}
}
]
}
}
}
任何建议都会有很大帮助!
我怀疑 availability
需要 nested
-- otherwise your array objects' values get flattened 并且您的 start
和 end
之间的连接丢失了。
简而言之,删除索引,更改映射,重新索引,然后使用类似于
的东西
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "units.availability",
"query": {
"bool": {
"must": [
{
"range": {
"units.availability.period.start": {
"lte": "2020-12-25T00:00:00"
}
}
},
{
"range": {
"units.availability.period.end": {
"gte": "2020-12-22T00:00:00"
}
}
}
]
}
}
}
}
]
}
}
}
顺便说一句,您可能还想考虑制作 units
自己 nested
——它们看起来也像独立的实体!
如果查询中提供的日期在 1 个周期范围内,我想要实现的是仅 return 结果。现在我有一个部分有效的查询,但它查询可用性列表中的所有时间段。它匹配是因为开始日期小于或等于 2020-12-25T00:00:00
并且结束日期大于或等于 2020-12-22T00:00:00
.
我想要的是与下面提供的文档不匹配的查询,因为两个句点都不匹配我输入的查询。
这是我的数据模型的一部分:
{
"units": [
{
"availability": [
{
"period": [
{
"start": "2020-09-12T00:00:00",
"end": "2020-10-31T00:00:00"
}
]
},
{
"period": [
{
"start": "2021-04-03T00:00:00",
"end": "2021-04-24T00:00:00"
}
]
}
]
}
]
}
这是我现在的 Elasticsearch 查询:
{
"query": {
"bool": {
"must": [
{
"range": {
"units.availability.period.start": {
"lte": "2020-12-25T00:00:00"
}
}
},
{
"range": {
"units.availability.period.end": {
"gte": "2020-12-22T00:00:00"
}
}
}
]
}
}
}
任何建议都会有很大帮助!
我怀疑 availability
需要 nested
-- otherwise your array objects' values get flattened 并且您的 start
和 end
之间的连接丢失了。
简而言之,删除索引,更改映射,重新索引,然后使用类似于
的东西{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "units.availability",
"query": {
"bool": {
"must": [
{
"range": {
"units.availability.period.start": {
"lte": "2020-12-25T00:00:00"
}
}
},
{
"range": {
"units.availability.period.end": {
"gte": "2020-12-22T00:00:00"
}
}
}
]
}
}
}
}
]
}
}
}
顺便说一句,您可能还想考虑制作 units
自己 nested
——它们看起来也像独立的实体!