В ElasticSearch, как проверить, существует ли поле, равно ли оно некоторому значению, или что поле не существует? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу найти все документы вasticsearch, где мое «обновленное» поле существует и меньше некоторого значения или где поле вообще не существует в документе. Я вижу, что использование bool-запроса, и должно и не может быть использовано, но как мне получить точный сценарий, которого я пытаюсь достичь с ними?

Спасибо!

1 Ответ

1 голос
/ 14 июня 2019

Предполагая, что 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"
                }
              }
            ]
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...