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

API Get

Новая справка по API

Для получения самых последних данных об API обратитесь к API документов.

Извлекает указанный 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

Spec-Zone.ru

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