Проверьте наличие нескольких полей - PullRequest
0 голосов
/ 05 апреля 2019

Запрос Elasticsearch DSL позволяет мне найти документы, для которых существует определенное поле:

GET /_search
{
    "query": {
        "exists" : { "field" : "firstname" }
    }
}

Но, похоже, работа только для одного поля существует, как проверить, существуют ли два поля? Например, я хотел бы найти пользователей, у которых есть поля firstname и lastname.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Вы можете сделать это, обернув два существующих в предложении filter или must, как показано ниже:

{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}

Использование в выражении filter даст тот же результат, что и mustпункт.Единственная разница будет в том, что фильтр с не будет вычислять балл, а тот, который должен, будет вычислять балл.Используйте в соответствии с вашими потребностями.Подробнее об этом читайте this .

Использование must:

{
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "firstname"
          }
        },
        {
          "exists": {
            "field": "lastname"
          }
        }
      ]
    }
  }
}
1 голос
/ 05 апреля 2019

Чтобы создать запрос с более чем одним условием, вы должны использовать условие bool вasticsearch.Пожалуйста, прочитайте здесь

Попробуйте:

GET /_search
{
  "query" : {
    "bool" : {
      "must": [{
        "exists" : { "field" : "firstname" },
        "exists" : { "field" : "lastname" }
    }]
  }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...