запрос эластичного поиска для (A И НЕ B) ИЛИ (C И НЕ D) - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу достичь (A exists AND B does not exist) OR (C exists AND D does not exist) в запросе ElasticSearch.

У меня есть то, что кажется плохим (многословным, непонятным для чтения) решением, которое я опубликую в качестве ответа.

Каков наилучший (четкий, наиболее читаемый) способ достижения (A AND NOT B) OR (C AND NOT D) запрос?

1 Ответ

1 голос
/ 30 апреля 2020

Как отмечено в вопросе, это первоначальная попытка, которая, кажется, работает, но кажется излишне многословной.

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "exists": {
                  "field": "A"
                 }
              },
              {
                "bool": {
                  "must_not": [
                 {
                      "exists": {
                        "field": "B"
                      }
                    }
                  ]
                }
              }
            ]
          }

        },
        {
          "bool": {
            "must": [
              {
                "exists": {
                  "field": "C"
                 }
              },
              {
                "bool": {
                  "must_not": [
                 {
                      "exists": {
                        "field": "D"
                      }
                    }
                  ]
                }
              }
            ]
          }

        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...