Elasticsearch核心数据:Document文档详解+存储检索完整实战
2026/4/21 20:36:28 网站建设 项目流程

Elasticsearch核心数据:Document文档详解+存储检索完整实战

    • 一、前言
    • 二、基础定义:什么是Elasticsearch Document?
      • 2.1 官方概念
      • 2.2 通俗理解
      • 2.3 文档核心特点
    • 三、文档结构:一个标准Document示例
      • 3.1 文档核心元数据(系统自动生成)
    • 四、核心流程:文档存储与检索流程图
    • 五、文档存储:新增/创建文档(完整API)
      • 5.1 方式1:自定义ID存储(推荐)
      • 5.2 方式2:自动生成ID存储
      • 5.3 存储成功返回结果
    • 六、文档检索:查询/获取文档(5种常用方式)
      • 6.1 方式1:根据ID精确获取文档
      • 6.2 方式2:全文检索(match 搜索)
      • 6.3 方式3:精确匹配(term 查询)
      • 6.4 方式4:组合条件查询
      • 6.5 方式5:查询所有文档
    • 七、文档操作:更新、删除文档
      • 7.1 更新文档(PUT / POST)
      • 7.2 删除文档
    • 八、核心概念:文档路由原理(为什么能快速找到?)
    • 九、文档 vs MySQL 数据对比表
    • 十、总结

🌺The Begin🌺点点关注,收藏不迷路🌺

一、前言

在 Elasticsearch 中,Document(文档)可被搜索的最小数据单元,所有搜索、聚合、查询操作的本质都是对文档进行操作。

很多新手不理解文档是什么、文档与MySQL数据的关系、如何正确存储/更新/删除/检索文档,导致数据写入失败、查询不到、数据结构混乱。

本文将从文档定义、结构特点、唯一标识、存储流程、检索流程、完整API实战全方位讲解,搭配流程图、对比表、可直接运行的命令,让你彻底掌握 ES 文档。

二、基础定义:什么是Elasticsearch Document?

2.1 官方概念

Document:Elasticsearch 中结构化的数据记录,以JSON 格式存储,相当于 MySQL 数据库中的一行数据

2.2 通俗理解

  • Elasticsearch 索引 → MySQL 数据库表
  • Document 文档 → MySQL 表中的一行记录
  • Field 字段 → MySQL 表中的一列

2.3 文档核心特点

  1. JSON 结构:轻量级、易读、结构化
  2. 无固定结构:灵活,不同文档可拥有不同字段
  3. 自带唯一ID:每个文档都有全局唯一标识_id
  4. 可被索引:所有字段会被自动索引,支持快速查询
  5. 有元数据:包含_index_id_source等系统字段

三、文档结构:一个标准Document示例

一个用户信息文档(JSON 格式):

{"name":"张三","age":25,"gender":"男","phone":"13800138000","address":"北京市朝阳区","create_time":"2025-01-01"}

3.1 文档核心元数据(系统自动生成)

元数据字段作用
_index文档所属索引
_id文档唯一ID
_source文档原始JSON数据
_version文档版本号(乐观锁)
_score搜索相关性评分

四、核心流程:文档存储与检索流程图

存储/新增文档

检索/查询文档

客户端发送文档数据

操作类型

协调节点接收

根据_id路由到对应数据节点

写入主分片

同步到副本分片

存储成功,返回结果

协调节点接收

分发请求到对应分片

节点并行查询

合并结果

返回文档给客户端

五、文档存储:新增/创建文档(完整API)

存储文档有两种方式:自定义ID自动生成ID

5.1 方式1:自定义ID存储(推荐)

指定ID=1001,存储到user_index索引:

PUT/user_index/_doc/1001{"name":"张三","age":25,"gender":"男","phone":"13800138000","address":"北京市朝阳区","create_time":"2025-01-01"}

✅ 返回结果:result: "created"表示存储成功。

5.2 方式2:自动生成ID存储

不指定ID,ES自动生成随机唯一ID:

POST/user_index/_doc{"name":"李四","age":28,"gender":"女","phone":"13900139000"}

✅ 自动生成的_id类似:3hXJ448sdf8SJhH

5.3 存储成功返回结果

{"_index":"user_index","_id":"1001","_version":1,"result":"created","_shards":{"total":2,"successful":2,"failed":0}}

六、文档检索:查询/获取文档(5种常用方式)

检索是 ES 核心能力,分为精确获取全文检索条件查询等。

6.1 方式1:根据ID精确获取文档

GET/user_index/_doc/1001

✅ 直接返回完整文档。

6.2 方式2:全文检索(match 搜索)

搜索名字包含“张三”的文档:

GET/user_index/_search{"query":{"match":{"name":"张三"}}}

6.3 方式3:精确匹配(term 查询)

查询手机号=13800138000的文档:

GET/user_index/_search{"query":{"term":{"phone":"13800138000"}}}

6.4 方式4:组合条件查询

年龄>25 且 性别=女:

GET/user_index/_search{"query":{"bool":{"filter":[{"range":{"age":{"gt":25}}},{"term":{"gender":"女"}}]}}}

6.5 方式5:查询所有文档

GET/user_index/_search{"query":{"match_all":{}}}

七、文档操作:更新、删除文档

7.1 更新文档(PUT / POST)

POST/user_index/_doc/1001{"name":"张三","age":26# 更新年龄}

✅ 返回result: "updated"

7.2 删除文档

DELETE/user_index/_doc/1001

✅ 返回result: "deleted"

八、核心概念:文档路由原理(为什么能快速找到?)

ES 根据文档ID自动计算存储节点:

公式:shard = hash(_id) % 主分片数量

流程:

  1. _id进行哈希计算
  2. 对主分片数取模
  3. 自动路由到对应分片与节点
  4. 检索时同理,直接定位数据

九、文档 vs MySQL 数据对比表

序号ElasticsearchMySQL
1Index(索引)Table(表)
2Document(文档)Row(一行数据)
3Field(字段)Column(列)
4Mapping(映射)Schema(表结构)
5JSON行数据
6无固定结构固定表结构

十、总结

  1. Document = ES 最小数据单元 = JSON 格式 = MySQL 一行数据
  2. 文档必须有唯一_id,支持自定义/自动生成
  3. 存储流程:路由 → 写入主分片 → 同步副本
  4. 检索流程:分发 → 并行查询 → 合并结果
  5. 核心API:PUT/POST存储、GET查询、DELETE删除

一句话记住:
所有ES操作都是围绕Document展开,文档是ES的灵魂与核心!



🌺The End🌺点点关注,收藏不迷路🌺

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询