Elasticsearch curl-запрос, сочетающий вложенный, существует, не существует запрос - PullRequest
0 голосов
/ 27 марта 2019

Я не могу понять, как обернуть операторы "query" для моего запроса в сложный вложенный объект, чтобы работать.

Я упростил концепции до следующего -

У меня есть индексс записями типа

{
"_index": "my_index",
"_type": "my_type",
"_id": "5",
"_source": {
  "group": "student",
  "user": [
    {
      "first": "Hubert",
      "last": "Rock",
      "grade": "B",
      "address": "12 Hunting St"
    }
  ]
}
}

Где «пользователь» - это вложенный объект.Теперь я хочу провести поиск, чтобы определить записи, которые имеют имя «Хьюберт», но не имеют записей в полях «класс» и «адрес».

Я мог бы сделать это отдельно - (Получитьвсе 'Hubert's)

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Hubert" }}
          ]
        }
      }
    }
  }
}

(Получить все записи, которые не имеют значений для' grade 'и' address ')

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
       "bool": {
          "must_not": [
              {  
                "exists" : {
                  "field":"user.grade"
                  }
              },
              {  
                "exists" : {
                  "field":"user.address"
                  }
              }
          ]
        }
      }
    }
  }
}

Но я действительно не знаю, как объединитьих.Есть идеи?

1 Ответ

1 голос
/ 27 марта 2019

Все, что вам нужно, это объединить предложения must и must_not в одном запросе bool, как показано ниже:

{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "user.first": "Hubert"
              }
            }
          ],
          "must_not": [
            {
              "exists": {
                "field": "user.grade"
              }
            },
            {
              "exists": {
                "field": "user.address"
              }
            }
          ]
        }
      }
    }
  }
}
...