我的应用中有check_in
和check_out
“d-m-Y”搜索字段。这些搜索在这些日期之间可用成员。
另一方面,会员可以编辑他们的日历,并可以将任何日期范围标记为标记为不可用的日历。
例如:Alice的日历。
这只是弹性的相关指数。
注意:没有多个搜索过滤器,我只是编写它们来显示几种情况。对于此搜索,不得通过弹性搜索找到Alice。
Example Searches:
check_in "04-12-2015"
check_out "07-12-2015"
check_in "08-12-2015"
check_out "11-12-2015"
check_in "09-12-2015"
check_out "15-12-2015"
check_in "05-12-2015"
check_out "11-12-2015"
"Alice's Not available Calendar" : [
{
"date_begin" : "05-12-2015",
"date_end' : '09-12-2015"
},
{
"date_begin" : "01-01-2016",
"date_end' : '07-02-2016"
},
{
"date_begin" : "09-04-2016",
"date_end' : '11-04-2016"
},
{
"date_begin" : "17-04-2016",
"date_end' : '21-04-2016"
}
]
我应该检查一下这些断言:
{check_in} lte {date_begin} and
{check_out} lte {date_end}
check_in
date_begin
check_out
date_end
{check_in} gte {date_begin} and
{check_out} lte {date_end}
date_begin
check_in
check_out
date_end
{check_in} lte {date_begin} and
{check_out} gte {date_end}
check_in
date_begin
date_end
check_out
{check_in} gte {date_begin} and
{check_out} gte {date_end}
date_begin
check_in
date_end
check_out
对于这些信息,我应该如何以期望的方式将查询发送到过滤器?我无法想象应该如何以适当的方式。
这样的东西,但我怎么能写出正确的语法。
{
"bool" : {
"must_not" : {
"range" : {
"date_begin" : { "lte" : "{check_in}" }
}
},
<---- AND ----->
"must_not" : {
"range" : {
"date_end" : { "lte" : "{check_out}" }
}
},
<---- OR ----->
"must_not" : {
"range" : {
"date_begin" : { "gte" : "{check_in}" }
}
},
<---- AND ----->
"must_not" : {
"range" : {
"date_end" : { "lte" : "{check_out}" }
}
},
<---- OR ----->
"must_not" : {
"range" : {
"date_begin" : { "lte" : "{check_in}" }
}
},
<---- AND ----->
"must_not" : {
"range" : {
"date_end" : { "gte" : "{check_out}" }
}
},
<---- OR ----->
"must_not" : {
"range" : {
"date_begin" : { "gte" : "{check_in}" }
}
},
<---- AND ----->
"must_not" : {
"range" : {
"date_end" : { "gte" : "{check_out}" }
}
},
}
}
答案 0 :(得分:0)
如果我理解正确,搜索应该返回具有以下条件的成员。
1)date_begin
应该大于check_in
和check_out
或强>
2)date_end
应该小于check_in
和check_out
让我们说用户输入 2014-02-19 作为check_in
日期和 2014-02-20 作为check_out
日期然后我认为关注查询将满足您的所有要求
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"range": {
"date_begin": {
"gt": "2014-02-19"
}
}
},
{
"range": {
"date_begin": {
"gt": "2014-02-20"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"range": {
"date_end": {
"lt": "2014-02-19"
}
}
},
{
"range": {
"date_end": {
"lt": "2014-02-20"
}
}
}
]
}
}
]
}
}
}
这将为您提供所有可用的会员。