Skip to content

索引入门

索引是什么?

在 Elasticsearch 中,索引(Index) 可以理解为关系型数据库里的**“表”:它是具有相同映射(或兼容映射)的文档的集合**,并且有一个在集群内唯一的名称。

索引名命名规范

  • 必须小写
  • 不能包含 \ / * ? " < > | , # : 空格 等特殊字符。
  • 不能以 -_+ 开头。
  • 建议使用有意义的英文或数字,如 productslogs-2024

创建索引

创建空索引

使用 PUT 请求,路径为索引名:

http
PUT /my_index

若索引不存在则会创建;若已存在且未指定 body,可能返回 400(需先删除或使用不同名称)。返回示例:

json
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_index"
}

带 settings 创建(分片与副本)

创建时可在 body 中指定 settings,例如主分片数、副本数:

http
PUT /my_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}
  • number_of_shards:主分片数,创建后一般不可改(7.x 默认 1,8.x 默认 1)。
  • number_of_replicas:每个主分片的副本数,可后续修改。单节点学习时可设为 0。

自动创建索引

若在写入文档时指定的索引不存在,Elasticsearch 会自动创建该索引(使用默认 settings 和动态映射)。若希望禁止自动创建,可在集群配置中设置:

yaml
action.auto_create_index: false

生产环境有时会关闭自动创建,改为通过模板或脚本统一创建索引。


查看与删除索引

查看索引

  • 查看单个索引(含 mapping、settings 等):
http
GET /my_index
  • 查看所有索引(简洁列表,常用):
http
GET _cat/indices?v

v 表示显示表头。返回列包括索引名、健康状态、分片数、文档数、存储大小等。

删除索引

http
DELETE /my_index

注意:删除索引会删除其中所有文档和映射,且不可恢复,操作前请确认。


索引的打开与关闭

  • 关闭索引:索引不再提供读写,但保留在集群元数据中,可节省资源。关闭后不能搜索、不能写入。
http
POST /my_index/_close
  • 打开索引:恢复为正常可读写状态。
http
POST /my_index/_open

适合对暂时不用的历史索引做“归档”式关闭,需要时再打开。