如何理解Elasticsearch Document Get API

发布时间:2021-11-17 15:31:25 作者:柒染
来源:亿速云 阅读:212
# 如何理解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)的演进

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符号估算),由于篇幅限制,此处展示的是文章结构和核心内容概要。如需完整文章,建议扩展每个章节的详细说明、增加更多示例代码和性能测试数据。

推荐阅读:
  1. Elasticsearch 索引文档
  2. 一、Elasticsearch原理与基本使用

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

elasticsearch document get api

上一篇:POJO CACHE配置问题的示例分析

下一篇:jquery如何获取tr里面有几个td

相关阅读

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

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