- Elasticsearch 指南其他版本
- 8.17 中的新功能
- Elasticsearch 基础
- 快速入门
- 设置 Elasticsearch
- 升级 Elasticsearch
- 索引模块
- 映射
- 文本分析
- 索引模板
- 数据流
- 摄取管道
- 别名
- 搜索您的数据
- 重新排名
- 查询 DSL
- 聚合
- 地理空间分析
- 连接器
- EQL
- ES|QL
- SQL
- 脚本
- 数据管理
- 自动缩放
- 监视集群
- 汇总或转换数据
- 设置高可用性集群
- 快照和还原
- 保护 Elastic Stack 的安全
- Watcher
- 命令行工具
- elasticsearch-certgen
- elasticsearch-certutil
- elasticsearch-create-enrollment-token
- elasticsearch-croneval
- elasticsearch-keystore
- elasticsearch-node
- elasticsearch-reconfigure-node
- elasticsearch-reset-password
- elasticsearch-saml-metadata
- elasticsearch-service-tokens
- elasticsearch-setup-passwords
- elasticsearch-shard
- elasticsearch-syskeygen
- elasticsearch-users
- 优化
- 故障排除
- 修复常见的集群问题
- 诊断未分配的分片
- 向系统中添加丢失的层
- 允许 Elasticsearch 在系统中分配数据
- 允许 Elasticsearch 分配索引
- 索引将索引分配过滤器与数据层节点角色混合,以在数据层之间移动
- 没有足够的节点来分配所有分片副本
- 单个节点上索引的分片总数已超过
- 每个节点的分片总数已达到
- 故障排除损坏
- 修复磁盘空间不足的数据节点
- 修复磁盘空间不足的主节点
- 修复磁盘空间不足的其他角色节点
- 启动索引生命周期管理
- 启动快照生命周期管理
- 从快照恢复
- 故障排除损坏的存储库
- 解决重复的快照策略失败问题
- 故障排除不稳定的集群
- 故障排除发现
- 故障排除监控
- 故障排除转换
- 故障排除 Watcher
- 故障排除搜索
- 故障排除分片容量健康问题
- 故障排除不平衡的集群
- 捕获诊断信息
- REST API
- API 约定
- 通用选项
- REST API 兼容性
- 自动缩放 API
- 行为分析 API
- 紧凑和对齐文本 (CAT) API
- 集群 API
- 跨集群复制 API
- 连接器 API
- 数据流 API
- 文档 API
- 丰富 API
- EQL API
- ES|QL API
- 功能 API
- Fleet API
- 图表探索 API
- 索引 API
- 别名是否存在
- 别名
- 分析
- 分析索引磁盘使用量
- 清除缓存
- 克隆索引
- 关闭索引
- 创建索引
- 创建或更新别名
- 创建或更新组件模板
- 创建或更新索引模板
- 创建或更新索引模板(旧版)
- 删除组件模板
- 删除悬挂索引
- 删除别名
- 删除索引
- 删除索引模板
- 删除索引模板(旧版)
- 存在
- 字段使用情况统计信息
- 刷新
- 强制合并
- 获取别名
- 获取组件模板
- 获取字段映射
- 获取索引
- 获取索引设置
- 获取索引模板
- 获取索引模板(旧版)
- 获取映射
- 导入悬挂索引
- 索引恢复
- 索引段
- 索引分片存储
- 索引统计信息
- 索引模板是否存在(旧版)
- 列出悬挂索引
- 打开索引
- 刷新
- 解析索引
- 解析集群
- 翻转
- 收缩索引
- 模拟索引
- 模拟模板
- 拆分索引
- 解冻索引
- 更新索引设置
- 更新映射
- 索引生命周期管理 API
- 推理 API
- 信息 API
- 摄取 API
- 许可 API
- Logstash API
- 机器学习 API
- 机器学习异常检测 API
- 机器学习数据帧分析 API
- 机器学习训练模型 API
- 迁移 API
- 节点生命周期 API
- 查询规则 API
- 重新加载搜索分析器 API
- 存储库计量 API
- 汇总 API
- 根 API
- 脚本 API
- 搜索 API
- 搜索应用程序 API
- 可搜索快照 API
- 安全 API
- 身份验证
- 更改密码
- 清除缓存
- 清除角色缓存
- 清除权限缓存
- 清除 API 密钥缓存
- 清除服务帐户令牌缓存
- 创建 API 密钥
- 创建或更新应用程序权限
- 创建或更新角色映射
- 创建或更新角色
- 批量创建或更新角色 API
- 批量删除角色 API
- 创建或更新用户
- 创建服务帐户令牌
- 委托 PKI 身份验证
- 删除应用程序权限
- 删除角色映射
- 删除角色
- 删除服务帐户令牌
- 删除用户
- 禁用用户
- 启用用户
- 注册 Kibana
- 注册节点
- 获取 API 密钥信息
- 获取应用程序权限
- 获取内置权限
- 获取角色映射
- 获取角色
- 查询角色
- 获取服务帐户
- 获取服务帐户凭据
- 获取安全设置
- 获取令牌
- 获取用户权限
- 获取用户
- 授予 API 密钥
- 具有权限
- 使 API 密钥失效
- 使令牌失效
- OpenID Connect 准备身份验证
- OpenID Connect 身份验证
- OpenID Connect 注销
- 查询 API 密钥信息
- 查询用户
- 更新 API 密钥
- 更新安全设置
- 批量更新 API 密钥
- SAML 准备身份验证
- SAML 身份验证
- SAML 注销
- SAML 失效
- SAML 完成注销
- SAML 服务提供商元数据
- SSL 证书
- 激活用户配置文件
- 禁用用户配置文件
- 启用用户配置文件
- 获取用户配置文件
- 建议用户配置文件
- 更新用户配置文件数据
- 具有用户配置文件权限
- 创建跨集群 API 密钥
- 更新跨集群 API 密钥
- 快照和还原 API
- 快照生命周期管理 API
- SQL API
- 同义词 API
- 文本结构 API
- 转换 API
- 使用情况 API
- Watcher API
- 定义
- 迁移指南
- 发行说明
- Elasticsearch 版本 8.17.0
- Elasticsearch 版本 8.16.1
- Elasticsearch 版本 8.16.0
- Elasticsearch 版本 8.15.5
- Elasticsearch 版本 8.15.4
- Elasticsearch 版本 8.15.3
- Elasticsearch 版本 8.15.2
- Elasticsearch 版本 8.15.1
- Elasticsearch 版本 8.15.0
- Elasticsearch 版本 8.14.3
- Elasticsearch 版本 8.14.2
- Elasticsearch 版本 8.14.1
- Elasticsearch 版本 8.14.0
- Elasticsearch 版本 8.13.4
- Elasticsearch 版本 8.13.3
- Elasticsearch 版本 8.13.2
- Elasticsearch 版本 8.13.1
- Elasticsearch 版本 8.13.0
- Elasticsearch 版本 8.12.2
- Elasticsearch 版本 8.12.1
- Elasticsearch 版本 8.12.0
- Elasticsearch 版本 8.11.4
- Elasticsearch 版本 8.11.3
- Elasticsearch 版本 8.11.2
- Elasticsearch 版本 8.11.1
- Elasticsearch 版本 8.11.0
- Elasticsearch 版本 8.10.4
- Elasticsearch 版本 8.10.3
- Elasticsearch 版本 8.10.2
- Elasticsearch 版本 8.10.1
- Elasticsearch 版本 8.10.0
- Elasticsearch 版本 8.9.2
- Elasticsearch 版本 8.9.1
- Elasticsearch 版本 8.9.0
- Elasticsearch 版本 8.8.2
- Elasticsearch 版本 8.8.1
- Elasticsearch 版本 8.8.0
- Elasticsearch 版本 8.7.1
- Elasticsearch 版本 8.7.0
- Elasticsearch 版本 8.6.2
- Elasticsearch 版本 8.6.1
- Elasticsearch 版本 8.6.0
- Elasticsearch 版本 8.5.3
- Elasticsearch 版本 8.5.2
- Elasticsearch 版本 8.5.1
- Elasticsearch 版本 8.5.0
- Elasticsearch 版本 8.4.3
- Elasticsearch 版本 8.4.2
- Elasticsearch 版本 8.4.1
- Elasticsearch 版本 8.4.0
- Elasticsearch 版本 8.3.3
- Elasticsearch 版本 8.3.2
- Elasticsearch 版本 8.3.1
- Elasticsearch 版本 8.3.0
- Elasticsearch 版本 8.2.3
- Elasticsearch 版本 8.2.2
- Elasticsearch 版本 8.2.1
- Elasticsearch 版本 8.2.0
- Elasticsearch 版本 8.1.3
- Elasticsearch 版本 8.1.2
- Elasticsearch 版本 8.1.1
- Elasticsearch 版本 8.1.0
- Elasticsearch 版本 8.0.1
- Elasticsearch 版本 8.0.0
- Elasticsearch 版本 8.0.0-rc2
- Elasticsearch 版本 8.0.0-rc1
- Elasticsearch 版本 8.0.0-beta1
- Elasticsearch 版本 8.0.0-alpha2
- Elasticsearch 版本 8.0.0-alpha1
- 依赖项和版本
Get API
编辑Get 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>
描述
编辑您可以使用 GET 从特定的索引中检索文档及其源或存储字段。使用 HEAD 来验证文档是否存在。您可以使用 _source
资源来仅检索文档源或验证其是否存在。
实时性
编辑默认情况下,get API 是实时的,并且不受索引刷新率的影响(数据何时对搜索可见)。如果请求存储字段(请参阅 stored_fields
参数)并且文档已更新但尚未刷新,则 get API 将必须解析和分析源以提取存储字段。为了禁用实时 GET,可以将 realtime
参数设置为 false
。
源过滤
编辑默认情况下,除非您使用了 stored_fields
参数或 _source
字段被禁用,否则 get 操作会返回 _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
的文档,但它是基于用户路由的。如果未指定正确的路由,则不会获取该文档。
偏好
编辑控制在哪个分片副本上执行 get 请求的 preference
。默认情况下,操作在分片副本之间随机执行。
preference
可以设置为
-
_local
- 如果可能,该操作将优先在本地分配的分片上执行。
- 自定义(字符串)值
- 自定义值将用于保证相同的自定义值将使用相同的分片。这可以帮助解决在不同刷新状态下命中不同分片时出现的“跳跃值”问题。示例值可以是诸如 Web 会话 ID 或用户名之类的值。
刷新
编辑可以设置 refresh
参数为 true
,以便在 get 操作之前刷新相关分片并使其可搜索。将其设置为 true
应在仔细考虑并验证它不会对系统造成过重负载(并减慢索引速度)之后进行。
分布式
编辑get 操作被哈希到特定的分片 ID 中。然后,它被重定向到该分片 ID 内的一个副本并返回结果。副本是主分片及其在该分片 ID 组中的副本。这意味着我们拥有的副本越多,GET 的扩展性就越好。
版本控制支持
编辑您可以使用 version
参数仅在文档的当前版本等于指定的版本时才检索该文档。
在内部,Elasticsearch 已将旧文档标记为已删除并添加了全新的文档。旧版本的文档不会立即消失,尽管您将无法访问它。当您继续索引更多数据时,Elasticsearch 会在后台清理已删除的文档。
路径参数
编辑-
<index>
- (必需,字符串)包含文档的索引名称。
-
<_id>
- (必需,字符串)文档的唯一标识符。
查询参数
编辑-
preference
- (可选,字符串)指定应在其上执行操作的节点或分片。默认为随机。
-
realtime
- (可选,布尔值)如果为
true
,则请求是实时的,而不是近实时的。默认为true
。请参阅 实时性。 -
refresh
- (可选,布尔值)如果为
true
,则请求会在检索文档之前刷新相关分片。默认为false
。 -
routing
- (可选,字符串)用于将操作路由到特定分片的自定义值。
-
stored_fields
- (可选,字符串)要包含在响应中的
存储字段
的逗号分隔列表。 -
_source
- (可选,字符串)返回或不返回
_source
字段的 true 或 false,或要返回的字段列表。 -
_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
,则包含存储在索引中的文档字段。
示例
编辑从 my-index-000001
索引中检索 _id
为 0 的 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
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
。
仅获取源字段
编辑使用 <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
您可以使用带有 _source
端点的 HEAD 来有效地测试文档 _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
选项检索。对象字段无法返回 - 如果指定,则请求失败。