简述Elasticsearch的文档是什么?
参考回答
在 Elasticsearch 中,文档(Document) 是存储和检索数据的基本单位。它是一个以 JSON 格式 表示的结构化数据,包含字段和对应的值。
- 文档结构:文档以键值对形式组织,类似关系型数据库中的一行数据。
- 存储位置:文档被存储在一个索引中,类似于数据库中的表。
- 标识符:每个文档都有一个唯一的标识符(ID),用于快速定位。
示例文档(一个描述产品的文档):
{
"id": 1,
"name": "Laptop",
"category": "Electronics",
"price": 1000,
"in_stock": true
}
详细讲解与拓展
1. 文档的组成
文档由以下几个核心部分组成:
– 字段(Field):
– 文档中的每个键值对称为字段。
– 字段类型可以是字符串、数字、布尔值、数组、嵌套对象等。
– 示例:
“`json
{
"name": "Laptop", // 字符串
"price": 1000, // 数字
"tags": ["new", "hot"] // 数组
}
“`
- 元数据:
每个文档还包含一些系统级元数据,比如:_index:文档所属的索引名称。_id:文档的唯一标识符。_version:文档的版本号。_source:文档的完整内容。
2. 文档在 Elasticsearch 中的存储
文档存储在索引(Index)中,索引是文档的集合:
– 每个文档对应一个或多个字段。
– 文档被分配到索引的主分片或副本分片中。
3. 文档的操作
- 创建文档:将文档存入索引中。
PUT /products/_doc/1 { "name": "Laptop", "price": 1000, "in_stock": true } - 获取文档:通过文档的 ID 检索。
GET /products/_doc/1 - 更新文档:对已有文档进行部分或全部修改。
POST /products/_update/1 { "doc": { "price": 950 } } - 删除文档:从索引中移除文档。
DELETE /products/_doc/1
4. 文档与关系型数据库的比较
| Elasticsearch 文档 | 关系型数据库 |
|---|---|
| 文档(Document) | 行(Row) |
| 字段(Field) | 列(Column) |
| 索引(Index) | 表(Table) |
_id(文档唯一标识符) |
主键(Primary Key) |
5. 文档的灵活性
- 文档可以有不同的字段,即 无模式(Schema-less):
- 不同文档可以有不同的字段。
- 例如:
{ "name": "Laptop", "price": 1000 }{ "name": "Smartphone", "price": 700, "brand": "ABC" } - 但为了更高效的索引和查询,可以使用 Mapping 定义字段结构和类型。
总结
Elasticsearch 的文档是以 JSON 格式存储的结构化数据,包含字段和值,类似关系型数据库中的一行。文档是 Elasticsearch 的核心数据单位,可存储、检索、更新或删除。与关系型数据库相比,文档具有灵活性,支持多种字段类型和嵌套数据结构。理解文档是掌握 Elasticsearch 的基础。