gpt4 book ai didi

elasticsearch - 阻止特定日期范围的接送

转载 作者:行者123 更新时间:2023-12-03 01:35:14 26 4
gpt4 key购买 nike

我有要租的物品。用户指定一个start_dateend_date。每个项目都有多个blocked_periods以及开始和结束日期。

目标:

查询所有可用项目。可以说:
12.11。,13.11。,14.11。,15.11。

被阻止的是13.和14。

该项目应该在12或15或从12到15可用。但是开始和结束日期不能在13和14上。

当前索引:

{
"development_items" : {
"aliases" : { },
"mappings" : {
"item" : {
"properties" : {
"blocked_periods" : {
"type" : "nested",
"properties" : {
"end_date" : {
"type" : "date",
"format" : "yyyy-MM-dd"
},
"start_date" : {
"type" : "date",
"format" : "yyyy-MM-dd"
}
}
}
}
}
},
"settings" : {
"index" : {
"creation_date" : "1503327829680",
"number_of_shards" : "5",
"number_of_replicas" : "1",
"uuid" : "9b9BhF-ITta2dlCKRLrnfA",
"version" : {
"created" : "2040499"
}
}
},
"warmers" : { }
}
}

当前查询:
  {
bool: {
must_not: {
nested: {
path: 'blocked_periods',
query: {
bool: {
should: [
{
bool: {
must: [
{
range: {
'blocked_periods.start_date': {
lte: start_date
}
}
},
{
range: {
'blocked_periods.end_date': {
gte: end_date
}
}
}
]
}
}
]
}
}
}
}
}
}

最佳答案

您希望记录给定的开始时间不在阻止期间,给定的结束时间不在阻止期间。换句话说,这是
您不希望文档中给定的起始时间处于阻塞时间段或给定的结束时间处于阻塞时间段(!A AND !B === !(A OR B))。

如果我们坚持使用您的映射并以嵌套方式进行操作,请按以下步骤操作:

{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "blocked_periods",
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"range": {
"blocked_periods.start_date": {
"lte": "START"
}
}
},
{
"range": {
"blocked_periods.end_date": {
"gte": "START"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"range": {
"blocked_periods.start_date": {
"lte": "END"
}
}
},
{
"range": {
"blocked_periods.end_date": {
"gte": "END"
}
}
}
]
}
}
]
}
}
}
}
]
}
}
}

但是,如果可以处理将字段名从 start_date/end_date更改为 gte/lte,我认为您会发现date_range方法更可取。
PUT my_index
{
"mappings": {
"item": {
"properties": {
"blocked_periods": {
"type": "date_range",
"format": "yyyy-MM-dd"
}
}
}
}
}

POST my_index/item/1
{
"blocked_periods": [
{
"gte": "2020-1-10",
"lte": "2020-1-15"
},
{
"gte": "2020-1-17",
"lte": "2020-1-25"
}
]
}

GET my_index/_search
{
"query": {
"bool": {
"must_not": [
{
"term": {
"blocked_periods": "START"
}
},
{
"term": {
"blocked_periods": "END"
}
}
]
}
}
}

关于elasticsearch - 阻止特定日期范围的接送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53141309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com