Предполагая, что updated
является date
типом поля, запрос будет выглядеть следующим образом:
GET test/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"exists": {
"field": "updated"
}
},
{
"range": {
"updated": {
"lte": "2019-06-10"
}
}
}
]
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "updated"
}
}
]
}
}
]
}
}
}
Объяснение выше:
Позвольте,
- Поле
updated
должно существовать ===> A
- Поле
updated
должно быть меньше X
===> B
- Поле
updated
вообще не должно существовать ===> C
Обязательное условие соответствует (A AND B) OR C
Пусть (A AND B)
будет D
Теперь с точки зрения упругости это становится:
should
{
D,
C
}
ИЛИ
should
{
must
{
A,
B
},
C
}
В приведенном выше запросе только запрос диапазона достаточно, и нетТребование проверить наличие обновленного поля с помощью существует запрос вместе с диапазоном.
Таким образом, запрос можно переписать как (B ИЛИ C):
GET test/_search
{
"query": {
"bool": {
"should": [
{
"range": {
"updated": {
"lte": "2019-06-10"
}
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "updated"
}
}
]
}
}
]
}
}
}