API Get
Извлекает указанный JSON-документ из индекса.
resp = client.get(
index="my-index-000001",
id="0",
)
print(resp) response = client.get( index: 'my-index-000001', id: 0 ) puts response
const response = await client.get({
index: "my-index-000001",
id: 0,
});
console.log(response); GET my-index-000001/_doc/0
Запрос
GET <index>/_doc/<_id>
HEAD <index>/_doc/<_id>
GET <index>/_source/<_id>
HEAD <index>/_source/<_id>
Предварительные условия
- Если включены функции безопасности Elasticsearch, у вас должна быть
readпривилегия индекса для целевого индекса или псевдонима индекса.
Описание
Вы используете GET для извлечения документа и его исходных данных или сохранённых полей из определённого индекса. Используйте HEAD для проверки существования документа. Вы можете использовать _source ресурс, чтобы получить только исходные данные документа или проверить, существует ли он.
Реальное время
По умолчанию, API get работает в режиме реального времени и не зависит от скорости обновления индекса (когда данные станут видимыми для поиска). В случае запроса сохранённых полей (см. параметр stored_fields) и обновления документа, который ещё не обновлён, API get должен разобрать и проанализировать исходные данные для извлечения сохранённых полей. Чтобы отключить режим реального времени для GET, можно установить параметр realtime на false.
Фильтрация исходных данных
По умолчанию операция get возвращает содержимое поля _source, если не используется параметр stored_fields или поле _source отключено. Вы можете отключить извлечение _source, используя параметр _source:
resp = client.get(
index="my-index-000001",
id="0",
source=False,
)
print(resp) response = client.get( index: 'my-index-000001', id: 0, _source: false ) puts response
const response = await client.get({
index: "my-index-000001",
id: 0,
_source: "false",
});
console.log(response); GET my-index-000001/_doc/0?_source=false
Если вам нужны только одно или два поля из _source, используйте параметры _source_includes или _source_excludes, чтобы включить или исключить определённые поля. Это особенно полезно с большими документами, где частичное извлечение может сэкономить сетевой трафик. Оба параметра принимают список полей, разделённых запятыми, или шаблоны подстановок. Пример:
resp = client.get(
index="my-index-000001",
id="0",
source_includes="*.id",
source_excludes="entities",
)
print(resp) response = client.get( index: 'my-index-000001', id: 0, _source_includes: '*.id', _source_excludes: 'entities' ) puts response
const response = await client.get({
index: "my-index-000001",
id: 0,
_source_includes: "*.id",
_source_excludes: "entities",
});
console.log(response); GET my-index-000001/_doc/0?_source_includes=*.id&_source_excludes=entities
Если вам нужно указать только включения, вы можете использовать более короткий формат:
resp = client.get(
index="my-index-000001",
id="0",
source="*.id",
)
print(resp) response = client.get( index: 'my-index-000001', id: 0, _source: '*.id' ) puts response
const response = await client.get({
index: "my-index-000001",
id: 0,
_source: "*.id",
});
console.log(response); GET my-index-000001/_doc/0?_source=*.id
Маршрутизация
Если при индексировании используется маршрутизация, необходимо указать значение маршрутизации для извлечения документа. Например:
resp = client.get(
index="my-index-000001",
id="2",
routing="user1",
)
print(resp) response = client.get( index: 'my-index-000001', id: 2, routing: 'user1' ) puts response
const response = await client.get({
index: "my-index-000001",
id: 2,
routing: "user1",
});
console.log(response); 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 - Название индекса, к которому принадлежит документ.
-
_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:
resp = client.get(
index="my-index-000001",
id="0",
)
print(resp) response = client.get( index: 'my-index-000001', id: 0 ) puts response
const response = await client.get({
index: "my-index-000001",
id: 0,
});
console.log(response); GET my-index-000001/_doc/0
API возвращает следующий результат:
{
"_index": "my-index-000001",
"_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:
resp = client.exists(
index="my-index-000001",
id="0",
)
print(resp) response = client.exists( index: 'my-index-000001', id: 0 ) puts response
const response = await client.exists({
index: "my-index-000001",
id: 0,
});
console.log(response); HEAD my-index-000001/_doc/0
Elasticsearch возвращает код состояния 200 - OK, если документ существует, или 404 - Not Found, если его нет.
Получение только поля _source
Используйте ресурс <index>/_source/<id>, чтобы получить только поле _source документа. Например:
resp = client.get_source(
index="my-index-000001",
id="1",
)
print(resp) response = client.get_source( index: 'my-index-000001', id: 1 ) puts response
const response = await client.getSource({
index: "my-index-000001",
id: 1,
});
console.log(response); GET my-index-000001/_source/1
Вы можете использовать параметры фильтрации источника для управления тем, какие части _source возвращаются:
resp = client.get_source(
index="my-index-000001",
id="1",
source_includes="*.id",
source_excludes="entities",
)
print(resp) response = client.get_source( index: 'my-index-000001', id: 1, _source_includes: '*.id', _source_excludes: 'entities' ) puts response
const response = await client.getSource({
index: "my-index-000001",
id: 1,
_source_includes: "*.id",
_source_excludes: "entities",
});
console.log(response); GET my-index-000001/_source/1/?_source_includes=*.id&_source_excludes=entities
Вы можете использовать HEAD с конечной точкой _source для эффективной проверки наличия источника документа. Источник документа недоступен, если он отключен в карте поля _source.
resp = client.exists_source(
index="my-index-000001",
id="1",
)
print(resp) response = client.exists_source( index: 'my-index-000001', id: 1 ) puts response
const response = await client.existsSource({
index: "my-index-000001",
id: 1,
});
console.log(response); HEAD my-index-000001/_source/1
Получение сохранённых полей
Используйте параметр stored_fields для указания набора сохранённых полей, которые вы хотите получить. Любые запрошенные поля, которые не сохранены, игнорируются. Рассмотрим, например, следующую карту:
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"counter": {
"type": "integer",
"store": False
},
"tags": {
"type": "keyword",
"store": True
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
counter: {
type: 'integer',
store: false
},
tags: {
type: 'keyword',
store: true
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
counter: {
type: "integer",
store: false,
},
tags: {
type: "keyword",
store: true,
},
},
},
});
console.log(response); PUT my-index-000001
{
"mappings": {
"properties": {
"counter": {
"type": "integer",
"store": false
},
"tags": {
"type": "keyword",
"store": true
}
}
}
} Теперь мы можем добавить документ:
resp = client.index(
index="my-index-000001",
id="1",
document={
"counter": 1,
"tags": [
"production"
]
},
)
print(resp) response = client.index(
index: 'my-index-000001',
id: 1,
body: {
counter: 1,
tags: [
'production'
]
}
)
puts response const response = await client.index({
index: "my-index-000001",
id: 1,
document: {
counter: 1,
tags: ["production"],
},
});
console.log(response); PUT my-index-000001/_doc/1
{
"counter": 1,
"tags": [ "production" ]
} И затем попытаться его получить:
resp = client.get(
index="my-index-000001",
id="1",
stored_fields="tags,counter",
)
print(resp) response = client.get( index: 'my-index-000001', id: 1, stored_fields: 'tags,counter' ) puts response
const response = await client.get({
index: "my-index-000001",
id: 1,
stored_fields: "tags,counter",
});
console.log(response); GET my-index-000001/_doc/1?stored_fields=tags,counter
API возвращает следующий результат:
{
"_index": "my-index-000001",
"_id": "1",
"_version": 1,
"_seq_no" : 22,
"_primary_term" : 1,
"found": true,
"fields": {
"tags": [
"production"
]
}
} Значения полей, извлечённые из самого документа, всегда возвращаются как массив. Поскольку поле counter не сохранено, запрос get его игнорирует.
Вы также можете получить метаданные, такие как поле _routing:
resp = client.index(
index="my-index-000001",
id="2",
routing="user1",
document={
"counter": 1,
"tags": [
"env2"
]
},
)
print(resp) response = client.index(
index: 'my-index-000001',
id: 2,
routing: 'user1',
body: {
counter: 1,
tags: [
'env2'
]
}
)
puts response const response = await client.index({
index: "my-index-000001",
id: 2,
routing: "user1",
document: {
counter: 1,
tags: ["env2"],
},
});
console.log(response); PUT my-index-000001/_doc/2?routing=user1
{
"counter" : 1,
"tags" : ["env2"]
} resp = client.get(
index="my-index-000001",
id="2",
routing="user1",
stored_fields="tags,counter",
)
print(resp) response = client.get( index: 'my-index-000001', id: 2, routing: 'user1', stored_fields: 'tags,counter' ) puts response
const response = await client.get({
index: "my-index-000001",
id: 2,
routing: "user1",
stored_fields: "tags,counter",
});
console.log(response); GET my-index-000001/_doc/2?routing=user1&stored_fields=tags,counter
API возвращает следующий результат:
{
"_index": "my-index-000001",
"_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/8.17/docs-get.html