Elasticsearch 元数据与源数据详解
一、概述
对于 Elasticsearch (ES) 新手来说,理解返回数据中的元数据 和源数据 是关键的第一步。下图是一个典型的 ES 文档返回结果,我们可以通过一个生动的比喻来彻底理解它。
(图片说明:红色框内为元数据,绿色框内为源数据)
二、核心比喻:快递包裹
想象一下你在网上购物的过程,一个快递包裹正好对应 ES 返回的一个文档。
三、元数据
1. 它是什么?
元数据是 ES 系统为了管理数据而自动添加的信息,就像贴在你快递包裹上的快递单。
2. 对应图片中的部分
图中红色方框内的部分就是元数据:
{
"_index": "product",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true
}
3. 特点与解释
- 系统生成:主要由 ES 自动创建和维护,用于追踪和管理文档。
- 用于定位:就像你用“运单号”查询快递一样,你通过
_index
(仓库名)和_id
(运单号)来唯一确定一个文档。 - 系统维护:
_version
(版本号)等信息由 ES 自动更新,用于控制并发修改。
4. 好比
快递单上的运单号、收货地址、仓库编号、包裹状态。
四、源数据
1. 它是什么?
源数据是 你真正存入 ES 的业务数据,是你应用程序的核心,就像快递包裹里你购买的商品本身。
2. 对应图片中的部分
图中绿色方框内的 _source
字段就是源数据:
{
"_source": {
"name": "xiaomi phone",
"desc": "shouji zhong de zhandouji",
"price": 3999,
"lv": "qijianji",
"type": "phone",
"createtime": "2020-10-01T08:00:00Z",
"tags": ["xingjiabi", "fashao", "buka"]
}
}
3. 特点与解释
- 核心内容:你存入和搜索的目标就是这些数据。
- 归你管:这些字段(
name
,price
,tags
等)完全由你的业务需求定义。 - 可修改:你可以像更新商品信息一样,对这些字段进行增、删、改、查。
4. 好比
包裹里的手机、价格标签、说明书等商品信息。
五、核心区别总结
特性 | 元数据 | 源数据 |
---|---|---|
创建者 | Elasticsearch 系统自动生成 | 用户/程序员 定义和存入 |
作用 | 系统内部用于管理、定位、版本控制 | 存储真正的业务信息 |
可修改性 | 大部分不能直接修改(如 _id ) | 可以任意增、删、改、查 |
类比物 | 快递单 | 包裹内的商品 |
六、结合图片再看一遍
现在,让我们结合开头的图片来最后一次加深理解:
_index: "product"
:这个“包裹”存放在名为product
(商品)的大仓库里。_id: "1"
:这个商品在仓库里的唯一货架编号(运单号)。_source: { ... }
:这里面装的才是商品的真实信息(名称、价格、标签等)。
工作流程:当你想从 ES 中获取数据时,系统会根据元数据(快递单号 _id
)快速定位到文档,然后将整个“包裹”(元数据 + 源数据)返回给你。你真正需要使用的是盒子里的“商品”(源数据),而“快递单”(元数据)则保证了整个过程的准确性和可管理性。