ElasticSearch 索引是用来存储和组织文档的结构。在 ElasticSearch 中,索引操作包括创建索引、管理索引、删除索引、更新索引等。下面是对这些常见索引操作的详细解释。
1. 创建索引(Create Index)
创建索引是将文档结构和存储配置定义为索引的一部分。索引配置包括分片数、副本数、映射、分析器等。
创建索引的基本命令:
PUT /index_name
这将创建一个空的索引。你可以在请求中指定映射(Mappings)、设置(Settings)等。
示例:
PUT /my_index
{
"settings": {
"number_of_shards": 3, // 设置分片数
"number_of_replicas": 2 // 设置副本数
},
"mappings": {
"properties": {
"title": {
"type": "text" // 设置字段类型
},
"date": {
"type": "date" // 设置日期字段类型
},
"price": {
"type": "float" // 设置浮动类型字段
}
}
}
}
settings
:包含索引的配置,常见的设置有分片数(number_of_shards
)、副本数(number_of_replicas
)。mappings
:定义索引中字段的类型和属性。
2. 查看索引信息(Get Index)
通过 GET 请求,可以查看索引的配置信息、映射等。
示例:
GET /my_index
获取索引的设置:
GET /my_index/_settings
获取索引的映射:
GET /my_index/_mapping
3. 删除索引(Delete Index)
当不再需要某个索引时,可以删除索引。删除索引会永久删除其中的数据和配置。
示例:
DELETE /my_index
4. 更新索引设置(Update Index Settings)
索引创建后,有些设置是不可更改的,比如 number_of_shards
。但可以修改某些动态设置,比如副本数、刷新间隔等。
示例:修改副本数
PUT /my_index/_settings
{
"settings": {
"number_of_replicas": 3
}
}
5. 索引数据(Index Document)
将数据插入到索引中,通常我们称其为“文档”。每个文档由多个字段组成,每个字段具有名称和值。
示例:索引文档
POST /my_index/_doc/1
{
"title": "Elasticsearch Guide",
"date": "2023-12-01",
"price": 29.99
}
在这个例子中,文档被存储在 my_index
索引中,文档ID为 1
。
可以使用PUT来指定文档ID:
PUT /my_index/_doc/1
{
"title": "Updated Elasticsearch Guide",
"date": "2023-12-02",
"price": 19.99
}
6. 更新文档(Update Document)
如果文档已存在,可以部分更新文档内容。ElasticSearch支持通过 update
API 来更新已有文档。
示例:
POST /my_index/_update/1
{
"doc": {
"price": 24.99
}
}
7. 批量操作(Bulk Indexing)
在需要批量插入、更新或删除多个文档时,可以使用 Bulk API。该操作支持多个文档的索引、更新、删除等批量操作。
示例:批量索引
POST /my_index/_bulk
{ "index": { "_id": 1 } }
{ "title": "First Doc", "date": "2023-01-01", "price": 10 }
{ "index": { "_id": 2 } }
{ "title": "Second Doc", "date": "2023-02-01", "price": 15 }
每个操作(如 index
, update
, delete
)后面跟着文档的内容。
8. 搜索索引(Search Index)
搜索是 ElasticSearch 最常见的操作之一。你可以使用查询(Query)语言来执行简单或复杂的搜索请求。
示例:简单的查询
GET /my_index/_search
{
"query": {
"match": {
"title": "Elasticsearch"
}
}
}
示例:带有分页的查询
GET /my_index/_search
{
"from": 0,
"size": 10,
"query": {
"match": {
"title": "guide"
}
}
}
from
:跳过的文档数(分页的起点)。size
:返回的文档数量。
示例:范围查询(Range Query)
GET /my_index/_search
{
"query": {
"range": {
"date": {
"gte": "2023-01-01",
"lte": "2023-12-31"
}
}
}
}
9. 映射(Mappings)操作
在索引中,映射定义了字段的数据类型、分析器等。你可以对已有索引的映射进行更新,但某些字段类型在映射创建后是不可修改的(例如,不能更改字段的类型)。
创建映射:
PUT /my_index/_mapping
{
"properties": {
"category": {
"type": "keyword"
}
}
}
10. 索引别名(Alias)
索引别名允许你给一个索引起多个别名,便于管理和访问。
创建别名:
POST /_aliases
{
"actions": [
{
"add": {
"index": "my_index",
"alias": "my_index_alias"
}
}
]
}
11. 索引模板(Index Template)
索引模板允许你为新创建的索引定义默认设置和映射。模板会根据索引的名称模式进行匹配。
示例:创建索引模板
PUT /_template/my_template
{
"index_patterns": ["log-*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date"
}
}
}
}
12. 索引优化(Force Merge)
索引优化可以通过合并多个段来减少存储空间,提高搜索效率。
示例:强制合并索引
POST /my_index/_forcemerge?max_num_segments=1
13. 索引恢复(Recovery)
ElasticSearch提供了恢复API,用于查看索引的恢复状态。
示例:查看索引恢复状态
GET /_recovery