在 Elasticsearch (ES) 中,索引(Index)是一个核心概念,它类似于关系型数据库中的数据库或表。索引的管理操作(如创建、打开和关闭)以及索引和存储的数据之间的关系是理解 ES 的关键。以下是详细的解释:
1. 创建索引(Create Index)
- 作用: 创建索引是初始化一个新的索引结构,包括定义索引的名称、映射(Mappings)、设置(Settings)等。映射定义了索引中字段的类型和属性,设置则包括分片(Shards)和副本(Replicas)的配置。
- 使用场景: 在开始存储数据之前,需要先创建索引。例如,创建一个名为
my-index
的索引:
PUT /my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"field1": { "type": "text" },
"field2": { "type": "keyword" }
}
}
}
2. 打开索引(Open Index)
- 作用: 打开索引是将一个已存在但处于关闭状态的索引重新启用,使其可以接受读写操作。默认情况下,创建的索引是打开的。
- 使用场景: 当需要对一个之前关闭的索引进行查询或写入时,可以通过打开索引来实现。例如,打开名为
my-index
的索引:
POST /my-index/_open
3. 关闭索引(Close Index)
- 作用: 关闭索引是将一个索引从活动状态转为非活动状态。关闭的索引不会占用系统资源(如内存),但也不能进行读写操作。
- 使用场景: 当不需要频繁访问某个索引时,可以关闭它以节省资源。例如,关闭名为
my-index
的索引:
POST /my-index/_close
4. 索引和存储的数据的区别
- 索引(Index): 在 Elasticsearch 中,索引不仅仅是数据的存储位置,它还包含了数据的结构定义(映射)和配置(设置)。索引是逻辑上的数据集合,类似于关系型数据库中的表。
- 存储的数据: 存储的数据是实际的文档(Documents),每个文档是一个 JSON 对象,包含了具体的数据内容。文档存储在索引中,并根据索引的映射和设置进行组织和管理。
示例
假设我们有一个名为 my-index
的索引,存储了以下文档:
POST /my-index/_doc/1
{
"name": "John Doe",
"age": 30,
"occupation": "Software Engineer"
}
- 索引:
my-index
包含了映射(定义了name
、age
和occupation
字段的类型)和设置(如分片和副本的数量)。 - 存储的数据: 上述 JSON 对象是存储在
my-index
索引中的一个文档。
总结
- 创建索引: 初始化一个新的索引结构,定义映射和设置。
- 打开索引: 启用一个已存在但关闭的索引,使其可以接受读写操作。
- 关闭索引: 将一个索引从活动状态转为非活动状态,节省系统资源。
- 索引和存储的数据: 索引是数据的逻辑集合,包含结构定义和配置;存储的数据是实际的文档,包含具体的数据内容。
通过理解这些概念,可以更好地管理和使用 Elasticsearch 进行数据存储和检索。