Elasticsearch запрос применить диапазон, если поле существует - PullRequest
1 голос
/ 22 сентября 2019

В моем индексе есть поле "valid_until", которое может быть либо нулевым, либо действительным значением даты / времени.Я хочу написать запрос, чтобы получить все документы из индекса и применить фильтр диапазона, только если «valid_until» имеет действительную дату.

Некоторые данные индекса:

[
   ['name' => 'book1', 'valid_until' => '2019-09-30 18:00:00'],
   ['name' => 'book2', 'valid_until' => ''],
   ['name' => 'book3', 'valid_until' => '2019-09-20 18:00:00'],
], 

Этозапрос, который я пробовал:

{
  "query": {
    "bool": {
      "should": [
        {
          "range": {
            "valid_until": {
              "gte": "2019-09-22 00:00:00"
            }
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "valid_until"
              }
            }
          }
        }
      ]
    }
  }
}

1 Ответ

1 голос
/ 22 сентября 2019

Если кому-то понадобится это в будущем, я решил это так:

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "range": {
                  "valid_until": {
                    "gte": "now"
                  }
                }
              },
              {
                "bool": {
                  "must_not": {
                    "exists": {
                      "field": "valid_until"
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      "must_not": [],
      "should": [],
      "must": []
    }
  }
}
...