Получить все документы для _id, хранящиеся в виде значений массива внутри документа, используя запросasticsearch - PullRequest
0 голосов
/ 26 сентября 2019

Ниже приведен пример моего документа индекса сопоставления:

{
  "_index": "sample_index",
  "_type": "default",
  "_id": "id-sample-0005",
  "_score": 1,
  "_source": {
      "name": "Eenst Y kios",
      "ids_mapped": [
         "id-sample-00010",
         "id-sample-00011"
      ]
   }
}

Мне нужно написать запрос, который получит документ на основе _id, переданного в качестве параметра, и вместе с тем все значение _id существует в "ids_mapped"field.

GET sample_index/_search
{
  "query": {
    "terms": {
      "_id": [
         "id-sample-0005"
      ]
    }
  }
}

Не знаю, как написать запрос выше, чтобы удовлетворить мои требования.По сути, в приведенном выше запросе пользователь передаст только значение «id-sample-0005» в качестве параметра, и запрос должен вернуть 3 документа.то есть [id-sample-0005, id-sample-00010, id-sample-00011].

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 26 сентября 2019

Одним из способов достижения этого является использование функции поиска terms .

Следующий запрос вернет все три документа с идентификаторами id-sample-0005, id-sample-00010 и * 1008.*:

POST sample_index/_search?pretty
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "_id": "id-sample-0005"              <-- input your ID here
          }
        },
        {
          "terms": {
            "_id": {
              "index": "sample_index",
              "type": "default",
              "id": "id-sample-0005",            <-- and here
              "path": "ids_mapped.keyword"
            }
          }
        }
      ]
    }
  }
}

Первое подчиненное ограничение возвращает сам основной документ, а второе подчиненное ограничение возвращает документы с сопоставленными идентификаторами.

...