我正在尝试在ElasticSearch中创建一个 bool过滤器,以检查与今天相比的start_date
和end_date
。如果start_date
或end_date
为null,则仍应返回结果。
例如,今天是2016-08-09。
似乎无法使其与我当前的代码配合使用:
POST _search
{
"query":{
"filtered": {
"query": {
"match_all": {}
},
"filter" : {
"bool": {
"must": [{
"range": {
"start_date": {"lte": "2016-08-09"}
}
},
{
"range": {
"end_date": {"gte": "2016-08-09"}
}
}],
"should": [{
"missing": {
"field": "start_date"
}
},
{
"missing": {
"field": "end_date"
}
}]
}
}
}
}
}
最佳答案
您可能需要这样的东西,即:
start_date
必须为null或在今天之前end_date
必须为null或在今天之后修改后的查询:
POST _search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"range": {
"start_date": {
"lte": "now"
}
}
},
{
"missing": {
"field": "start_date"
}
}
]
}
},
{
"bool": {
"should": [
{
"range": {
"end_date": {
"gte": "now"
}
}
},
{
"missing": {
"field": "end_date"
}
}
]
}
}
]
}
}
}
}
}
关于elasticsearch - Elasticsearch- bool 过滤器:日期范围或字段可以为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844444/