Elasticsearch权威指南:文档(Document)核心概念解析
什么是文档?
在Elasticsearch中,文档(Document)是最基本的数据单元,可以将其理解为一个独立的JSON对象。文档由键值对组成,其中键是字段名,值可以是多种数据类型:
- 字符串(如"John Smith")
- 数字(如42)
- 布尔值(如true)
- 对象(如嵌套的"home"对象)
- 数组(如"accounts"数组)
- 特殊类型(如日期字符串"2014-06-01")
一个典型的文档示例如下:
{
"name": "John Smith",
"age": 42,
"confirmed": true,
"join_date": "2014-06-01",
"home": {
"lat": 51.5,
"lon": 0.1
},
"accounts": [
{"type": "facebook", "id": "johnsmith"},
{"type": "twitter", "id": "johnsmith"}
]
}
重要说明:
- 字段名可以是任何有效字符串,但不能包含英文句点(.)
- 文档与普通JSON对象的区别在于,文档是Elasticsearch中的顶级对象,具有唯一ID标识
文档元数据
每个文档除了包含实际数据外,还有描述文档本身的元数据(Metadata),其中最重要的三个元数据是:
1. _index(索引)
索引是文档的逻辑容器,用于将相关文档组织在一起。例如:
- 产品数据存储在products索引
- 销售记录存储在sales索引
技术细节:
- 索引名称必须小写,不能以下划线开头,不能包含逗号
- 实际上索引由多个分片(Shard)组成,但对应用透明
- 示例:我们可以使用"website"作为索引名
2. _type(类型)
类型用于在索引内进一步分类文档。例如:
- 在products索引中,可以有electronics、kitchen等类型
类型命名规则:
- 可以包含大小写字母
- 不能以下划线或句点开头
- 不能包含逗号
- 长度不超过256个字符
- 示例:我们可以使用"blog"作为类型名
3. _id(文档ID)
文档ID是文档的唯一标识符,与_index和_type共同确定一个文档的唯一位置:
- 可以自定义ID
- 也可以让Elasticsearch自动生成
文档存储原理
当文档被索引时:
- Elasticsearch会为文档分配一个唯一ID(如果未提供)
- 根据索引和类型设置,文档会被路由到特定分片
- 文档内容会被分析并建立倒排索引
- 原始JSON会被存储以便检索
最佳实践:
- 相关文档应该放在同一个索引中
- 同一索引中不同类型的文档应具有相似结构
- 避免在索引中存储完全不相关的数据
理解文档的这些核心概念是使用Elasticsearch的基础,后续我们将深入探讨如何创建、查询和管理这些文档。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考