Запрос вложенного объекта Elastic Search - PullRequest
0 голосов
/ 11 июня 2018

У меня есть эластичная коллекция индексов поиска, как показано ниже,

"_index":"test",
"_type":"abc",
"_source":{
       "file_name":"xyz.ex"
       "metadata":{
          "format":".ex"
          "profile":[
                     {"date_value" : "2018-05-30T00:00:00",
                     "key_id" : "1",
                     "type" : "date",
                     "value" : [ "30-05-2018" ]
                      },
                      {
                       "key_id" : "2",
                       "type" : "freetext",
                       "value" : [ "New york" ]
                       }
}

Теперь мне нужно выполнить поиск документа, сопоставив key_id его значению.(key_id - это поле, значение которого хранится в "value") Пример.Для поля key_id='1', если оно value = "30-05-2018", оно должно соответствовать указанному выше документу.

Я попытался отобразить это как вложенный объект, но я не могу написать запрос для поиска с 2 или более key_idсоответствующий его значению.

1 Ответ

0 голосов
/ 11 июня 2018

Вот как бы я это сделал.Вам необходимо выполнить AND с помощью bool/filter (или bool/must) двух вложенных запросов для каждой пары условий, поскольку вы хотите сопоставить два разных вложенных элемента из одного и того же родительского документа.

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "metadata.profile",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "metadata.profile.f1": "a"
                    }
                  },
                  {
                    "term": {
                      "metadata.profile.f2": true
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "metadata.profile",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "metadata.profile.f1": "b"
                    }
                  },
                  {
                    "term": {
                      "metadata.profile.f2": false
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...