Запрос Elasticsearch: как применить несколько условий к нескольким полям - PullRequest
0 голосов
/ 18 января 2019

Я новичок в ES. У меня есть два поля в моих данных includes_publishers и exclude_publishers . Оба эти списка являются взаимоисключающими.

Я пытаюсь создать запрос, который проверил бы, существует ли значение в include_publishers ИЛИ значение NOT-существует в исключенных_публикаторах ИЛИ (оба поля включены_публикаторы и исключенные_публикаторы НЕ существуют)

Я пытаюсь достичь этого, комбинируя условие must_not в секции must следующим образом:

{
  "query": {
    "bool": {
      "should": [{
          "match": {
            "rights.included_publishers": "ABCD"
          }
        },
        {
          "bool": {
            "must_not": [{
                "exists": {
                  "field": "rights.included_publishers"
                }
              }, {
                "exists": {
                  "field": "rights.excluded_publishers"
                }
              },
              {
                "match": {
                  "rights.excluded_publishers": "ABCD"
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }

  }
}

Все записи должны быть возвращены где: либо ABCD существует в списке включенных_публикаторов, либо само поле include_publishers не существует. ABCD НЕ существует в списке исключенных_публикаторов ИЛИ само поле исключенных_публикаторов не существует.

Этот запрос работает после того, как я заменил «term» на «match» в первом случае (редактируется позже). Я получаю правильный набор результатов. Я не уверен, охватывает ли он все случаи.

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