0
我試圖創建一個查詢,該查詢返回在該日期(或日期範圍)內沒有保留或根本沒有保留的可用產品。這讓我瘋狂。查詢使用開始日期和結束日期獲取可用日期
這是我當前的映射索引設置:
{
"development_product_instances" : {
"aliases" : { },
"mappings" : {
"product_instance" : {
"properties" : {
"reservations" : {
"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: {
should: [
{
nested: {
path: "reservations",
filter: {
bool: {
must_not: [
{
range:
{
"reservations.start_date":
{
gte: start_date,
lte: end_date
}
}
},
{
range:
{
"reservations.end_date":
{
gte: start_date,
lt: end_date
}
}
}
]
}
}
}
},
{
not: {
nested: {
path: "reservations",
filter: {
match_all: {}
}
}
}
}
]
}
}
當有一個以上的預訂將返回所有。
我希望有人能看到那裏的bug。也許我在更大的圖景中錯過了一些東西。
我剛剛意識到如果我有一個保留讓我們說2017-09-10到2017-09-12和我查詢從2017年9月11日至2017年9月11日的可用性,它說可用(即沒有保留),但有一個。有任何想法嗎?基本上我需要相當於SQL:WHERE start_date <= [ENDDATE] AND end_date> = [STARTDATE]正確嗎? – Oliver
你是對的,對不起!我已經更新了該案件的答案。我懷疑有一個更簡潔的查詢 - 我會再次更新,如果我想到它。 – dshockley
看起來不錯!非常感謝很多! – Oliver