Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›REST API ›API документов

API Get

Извлекает указанный JSON документ из индекса.

GET my-index-000001/_doc/0

Запрос

GET <index>/_doc/<_id>

HEAD <index>/_doc/<_id>

GET <index>/_source/<_id>

HEAD <index>/_source/<_id>

Предварительные условия

  • Если включены функции безопасности Elasticsearch, у вас должна быть привилегия индекса для целевого индекса или псевдонима индекса.

Описание

Вы используете GET для извлечения документа и его исходных данных или сохраненных полей из определённого индекса. Используйте HEAD для проверки существования документа. Вы можете использовать ресурс _source для извлечения только исходных данных документа или проверки его существования.

Режим реального времени

По умолчанию API get работает в режиме реального времени и не зависит от частоты обновления индекса (когда данные станут видимыми для поиска). В случае, если запрашиваются сохранённые поля (см. параметр stored_fields) и документ был обновлён, но ещё не обновлён в индексе, API get должен проанализировать исходные данные для извлечения сохранённых полей. Для отключения режима реального времени GET можно установить параметр realtime в значение false.

Фильтрация исходных данных

По умолчанию операция get возвращает содержимое поля _source, если не используется параметр stored_fields или если поле _source отключено. Вы можете отключить извлечение _source, используя параметр _source:

GET my-index-000001/_doc/0?_source=false

Если вам нужны только одно или два поля из _source, используйте параметры _source_includes или _source_excludes для включения или исключения определённых полей. Это особенно полезно с большими документами, где частичное извлечение может сэкономить сетевой трафик. Оба параметра принимают список полей, разделённых запятыми, или выражения с подстановкой. Пример:

GET my-index-000001/_doc/0?_source_includes=*.id&_source_excludes=entities

Если вам нужно только указать включения, можно использовать более короткую запись:

GET my-index-000001/_doc/0?_source=*.id
Маршрутизация

Если при индексировании используется маршрутизация, необходимо также указать значение маршрутизации для извлечения документа. Например:

GET my-index-000001/_doc/2?routing=user1

Этот запрос получает документ с id 2, но он маршрутизируется на основе пользователя. Документ не извлекается, если не указана правильная маршрутизация.

Предпочтение

Управляет preference, какой репликой фрагмента выполнить запрос get. По умолчанию операция выбирается случайным образом среди реплик фрагмента.

Параметр preference может быть установлен на:

_local
Операция будет выполняться на локальном выделенном фрагменте, если это возможно.
Пользовательское значение (строка)
Пользовательское значение будет использоваться для гарантированного использования тех же фрагментов для одинаковых значений. Это может помочь с «перепрыгиванием значений», когда попадаются разные фрагменты в разных состояниях обновления. Пример значения – идентификатор сессии веб-сайта или имя пользователя.
Обновление

Параметр refresh можно установить в true, чтобы обновить соответствующий фрагмент перед операцией get и сделать его доступным для поиска. Установка его в true должна быть тщательно обдумана и проверена, чтобы это не создавало большой нагрузки на систему (и не замедляло индексирование).

Распределённый

Операция get хешируется в определённый идентификатор фрагмента. Затем она перенаправляется на одну из реплик в этом идентификаторе фрагмента и возвращает результат. Реплики — это основной фрагмент и его реплики в группе фрагментов. Это означает, что чем больше у нас реплик, тем лучше масштабирование GET.

Поддержка версий

Вы можете использовать параметр version, чтобы извлечь документ только в том случае, если его текущая версия совпадает с заданной.

Внутренне Elasticsearch помечает старый документ как удалённый и добавляет совершенно новый. Старая версия документа не исчезает сразу, хотя получить к ней доступ нельзя. Elasticsearch очищает удалённые документы в фоновом режиме, по мере продолжения индексирования данных.

Параметры пути

<index>
(Обязательно, строка) Название индекса, содержащего документ.
<_id>
(Обязательно, строка) Уникальный идентификатор документа.

Параметры запроса

preference
(Необязательно, строка) Указывает узел или фрагмент, на котором должна быть выполнена операция. По умолчанию случайный.
realtime
(Необязательно, логическое значение) Если true, запрос выполняется в режиме реального времени, а не в режиме почти реального времени. По умолчанию true. См. Режим реального времени.
refresh
(Необязательно, логическое значение) Если true, запрос обновляет соответствующий фрагмент перед извлечением документа. По умолчанию false.
routing
(Необязательно, строка) Пользовательское значение, используемое для маршрутизации операций на определённый фрагмент.
stored_fields
(Необязательно, строка) Список, разделённый запятыми, stored fields для включения в ответ.
_source
(Необязательно, строка) True или false для возврата поля _source, или список полей для возврата.
_source_excludes

(Необязательно, строка) Список, разделённый запятыми, полей источника для исключения из ответа.

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

Если параметр _source равен false, этот параметр игнорируется.

_source_includes

(Необязательно, строка) Список, разделённый запятыми, полей источника для включения в ответ.

Если этот параметр указан, возвращаются только эти поля источника. Вы можете исключить поля из этого набора, используя параметр запроса _source_excludes.

Если параметр _source равен false, этот параметр игнорируется.

version
(Необязательно, целое число) Явное число версии для контроля конкурентного доступа. Указанная версия должна соответствовать текущей версии документа для успешного запроса.
version_type
(Необязательно, перечисление) Конкретный тип версии: external, external_gte.

Тело ответа

_index
Название индекса, к которому принадлежит документ.
_type
Тип документа. Elasticsearch индексы теперь поддерживают единственный тип документа, _doc.
_id
Уникальный идентификатор документа.
_version
Версия документа. Увеличивается каждый раз при обновлении документа.
_seq_no
Номер последовательности, назначенный документу для операции индексирования. Номера последовательности используются для предотвращения перезаписи более новой версии документа более старой версией. См. Контроль конкурентного доступа.
_primary_term
Основной термин, назначенный документу для операции индексирования. См. Контроль конкурентного доступа.
found
Указывает, существует ли документ: true или false.
_routing
Явное значение маршрутизации, если задано.
_source
Если found равен true, содержит данные документа в формате JSON. Исключается, если параметр _source равен false или параметр stored_fields равен true.
_fields
Если параметр stored_fields равен true и found равно true, содержит поля документа, хранящиеся в индексе.

Примеры

Получите документ JSON с _id 0 из индекса my-index-000001:

GET my-index-000001/_doc/0

API возвращает следующий результат:

{
  "_index": "my-index-000001",
  "_type": "_doc",
  "_id": "0",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "@timestamp": "2099-11-15T14:12:12",
    "http": {
      "request": {
        "method": "get"
      },
      "response": {
        "status_code": 200,
        "bytes": 1070000
      },
      "version": "1.1"
    },
    "source": {
      "ip": "127.0.0.1"
    },
    "message": "GET /search HTTP/1.1 200 1070000",
    "user": {
      "id": "kimchy"
    }
  }
}

Проверьте, существует ли документ с _id 0:

HEAD my-index-000001/_doc/0

Elasticsearch возвращает код состояния 200 - OK, если документ существует, или 404 - Not Found, если его нет.

Получить только поле source

Используйте ресурс <index>/_source/<id>, чтобы получить только поле _source документа. Например:

GET my-index-000001/_source/1

Вы можете использовать параметры фильтрации source, чтобы контролировать, какие части _source будут возвращены:

GET my-index-000001/_source/1/?_source_includes=*.id&_source_excludes=entities

Вы можете использовать HEAD с конечной точкой _source, чтобы эффективно проверить, существует ли _source документа. Источник документа недоступен, если он отключен в карте.

HEAD my-index-000001/_source/1
Получить сохраненные поля

Используйте параметр stored_fields, чтобы указать набор сохранённых полей, которые вы хотите получить. Любые запрошенные поля, которые не сохранены, игнорируются. Рассмотрим, например, следующую карту:

PUT my-index-000001
{
   "mappings": {
       "properties": {
          "counter": {
             "type": "integer",
             "store": false
          },
          "tags": {
             "type": "keyword",
             "store": true
          }
       }
   }
}

Теперь мы можем добавить документ:

PUT my-index-000001/_doc/1
{
  "counter": 1,
  "tags": [ "production" ]
}

И затем попытаться его получить:

GET my-index-000001/_doc/1?stored_fields=tags,counter

API возвращает следующий результат:

{
   "_index": "my-index-000001",
   "_type": "_doc",
   "_id": "1",
   "_version": 1,
   "_seq_no" : 22,
   "_primary_term" : 1,
   "found": true,
   "fields": {
      "tags": [
         "production"
      ]
   }
}

Значения полей, извлеченные из самого документа, всегда возвращаются в виде массива. Поскольку поле counter не сохранено, запрос get его игнорирует.

Вы также можете получить поля метаданных, такие как поле _routing:

PUT my-index-000001/_doc/2?routing=user1
{
  "counter" : 1,
  "tags" : ["env2"]
}
GET my-index-000001/_doc/2?routing=user1&stored_fields=tags,counter

API возвращает следующий результат:

{
   "_index": "my-index-000001",
   "_type": "_doc",
   "_id": "2",
   "_version": 1,
   "_seq_no" : 13,
   "_primary_term" : 1,
   "_routing": "user1",
   "found": true,
   "fields": {
      "tags": [
         "env2"
      ]
   }
}

Только листовые поля могут быть получены с опцией stored_field. Поля-объекты не могут быть возвращены — в случае указания запрос завершается ошибкой.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docs-get.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API