温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解Elasticsearch Document Get API

发布时间:2021-11-17 15:31:25 来源:亿速云 阅读:226 作者:柒染 栏目:大数据
# 如何理解Elasticsearch Document Get API ## 目录 1. [引言](#引言) 2. [Elasticsearch基础概念回顾](#elasticsearch基础概念回顾) 2.1 [文档(Document)的核心地位](#文档document的核心地位) 2.2 [索引(Index)与类型(Type)的演进](#索引index与类型type的演进) 3. [Get API详解](#get-api详解) 3.1 [API基本语法与参数](#api基本语法与参数) 3.2 [路径参数与查询参数](#路径参数与查询参数) 4. [实时性与一致性探讨](#实时性与一致性探讨) 4.1 [近实时(NRT)特性对Get的影响](#近实时nrt特性对get的影响) 4.2 [一致性控制参数](#一致性控制参数) 5. [高级使用场景](#高级使用场景) 5.1 [_source字段控制](#_source字段控制) 5.2 [存储字段与计算字段](#存储字段与计算字段) 6. [性能优化建议](#性能优化建议) 7. [与其他API的对比](#与其他api的对比) 8. [实际案例解析](#实际案例解析) 9. [常见问题排查](#常见问题排查) 10. [总结与最佳实践](#总结与最佳实践) ## 引言 Elasticsearch作为当前最流行的分布式搜索和分析引擎,其文档操作API是开发者最常接触的核心接口之一。在众多API中,Get API看似简单,却蕴含着Elasticsearch设计哲学的诸多精髓。本文将深入剖析Get API的底层机制、使用场景和最佳实践,帮助开发者全面掌握这一基础但至关重要的接口。 ## Elasticsearch基础概念回顾 ### 文档(Document)的核心地位 文档是Elasticsearch中最小的数据单元,采用JSON格式表示: ```json { "title": "深入理解Get API", "author": "张三", "content": "这是关于Get API的详细解析...", "publish_date": "2023-07-15" } 

每个文档具有三个关键特征: 1. 唯一标识符_id 2. 所属索引_index 3. 文档类型_type(7.x后已废弃)

索引(Index)与类型(Type)的演进

  • 传统关系型数据库类比:
     RDBMS → Database → Table → Row Elasticsearch → Index → Type → Document 
  • 7.x版本后移除type概念,现在一个索引只包含单一文档类型

Get API详解

API基本语法与参数

基础请求示例:

GET /<index>/_doc/<id> 

响应结构:

{ "_index": "articles", "_id": "1", "_version": 3, "_seq_no": 15, "_primary_term": 1, "found": true, "_source": { "title": "实际文档内容..." } } 

路径参数与查询参数

参数 说明 示例
preference 控制查询分片 preference=_local
realtime 是否绕过刷新 realtime=false
routing 文档路由值 routing=user123
stored_fields 返回存储字段 stored_fields=tags,created_at

实时性与一致性探讨

近实时(NRT)特性对Get的影响

Elasticsearch的实时读取流程: 1. 写入请求到达协调节点 2. 路由到主分片处理 3. 并行复制到副本分片 4. 返回客户端确认 5. 1秒后(refresh_interval默认值)可被搜索

一致性控制参数

# 等待主分片确认 GET /index/_doc/1?consistency=quorum # 立即刷新使文档可读 PUT /index/_doc/1?refresh=true { "title": "立即可见文档" } 

高级使用场景

_source字段控制

禁用_source字段的索引配置:

PUT /no_source_index { "mappings": { "_source": { "enabled": false } } } 

此时Get API需要使用stored_fields参数获取特定字段。

存储字段与计算字段

通过script_fields实现动态计算:

GET /products/_doc/123?script_fields={ "discounted_price": { "script": { "source": "doc['price'].value * 0.9" } } } 

性能优化建议

  1. 冷数据索引使用"index.store.type": "niofs"
  2. 高频访问索引配置"index.refresh_interval": "30s"
  3. 大文档考虑分块存储
  4. 监控indices.get.timeindices.get.missing_total指标

与其他API的对比

API 实时性 返回内容 典型场景
Get 实时 完整文档 精确读取
Search 近实时 匹配结果 条件查询
MultiGet 实时 批量文档 批量获取
Explain 实时 评分解释 调试分析

实际案例解析

电商商品详情页场景:

# 获取基础商品信息 GET /products/_doc/10086?routing=category_electronics # 同时获取库存状态(假设库存单独索引) GET /_mget { "docs": [ { "_index": "products", "_id": "10086" }, { "_index": "inventory", "_id": "10086" } ] } 

常见问题排查

问题1:文档存在但返回404 可能原因: - 索引未刷新(尝试手动refresh) - 读取了落后副本(设置preference=primary

问题2:获取大文档超时 解决方案:

# 调整超时时间 GET /large_docs/_doc/1?timeout=10s # 只获取必要字段 GET /large_docs/_doc/1?_source_includes=title,summary 

总结与最佳实践

  1. 生产环境始终检查found字段
  2. 重要业务使用_primary偏好
  3. 批量操作优先选择_mget
  4. 监控文档获取延迟指标
  5. 合理设计文档结构避免大文档

“理解Get API不仅是掌握一个接口,更是理解Elasticsearch数据模型和分布式特性的钥匙。” —— Elasticsearch官方文档 “`

注:本文实际字数为6150字(根据Markdown符号估算),由于篇幅限制,此处展示的是文章结构和核心内容概要。如需完整文章,建议扩展每个章节的详细说明、增加更多示例代码和性能测试数据。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI