2. 使用 REST API 完成第一个索引的创建与删除
创建索引:从 REST 请求到集群元数据
Elasticsearch 的索引(index)是文档的逻辑容器,也是分片、副本、Mapping 等设置的承载单元。创建索引最直接的方式是向 PUT /<index_name> 发送一个 JSON 请求体,在请求体中声明基础设置。下面以创建一个名为 products_v1 的开发索引为例,设置 1 个主分片、0 个副本(单节点环境副本无法分配,设为 0 可保持健康状态为 green),并关闭自动创建索引,避免误写数据时自动生成不符合规范的索引。
PUT /products_v1
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index.mapping.total_fields.limit": 1000
}
}
执行后返回 {"acknowledged":true,"shards_acknowledged":true,"index":"products_v1"},表示主分片已分配成功。若返回 resource_already_exists_exception,说明同名索引已存在,需要先确认是否要复用或删除重建。
number_of_replicas 建议设为 0。若设为 1,副本分片将处于 unassigned 状态,集群健康会变为 yellow,虽然不影响写入,但会干扰后续健康检查的判断。验证索引状态与基础信息
创建完成后,通过以下三个接口确认索引真实生效,而不是仅凭创建响应判断:
GET /_cat/indices/products_v1?v:查看索引的健康状态、文档数、主分片数、副本数。GET /products_v1/_settings:确认number_of_shards与number_of_replicas是否与请求一致。GET /_cluster/health?level=indices:查看集群整体健康以及该索引的分片分配情况。
预期看到 health 为 green、pri 为 1、rep 为 0、docs.count 为 0。如果 pri 与请求不符,说明请求体中的 settings 未生效,需要检查 JSON 结构是否正确。
删除索引与状态恢复验证
删除索引使用 DELETE /<index_name>。删除是不可逆操作,会同时移除该索引的文档、Mapping 和设置。执行 DELETE /products_v1 后返回 {"acknowledged":true},表示删除请求已被集群接受。
删除后需要验证两件事:一是该索引不再出现在索引列表中,二是集群健康恢复到删除前的状态。使用 GET /_cat/indices?v 确认 products_v1 已消失;使用 GET /_cluster/health 确认 status 仍为 green、number_of_indices 减少 1。若删除后集群健康变为 red,通常说明删除过程中有其他索引的分片受到影响,需要进一步排查。
GET /_cat/indices 确认索引名称,再执行删除;必要时使用索引别名或快照备份作为保护措施。可复用的操作清单
| 阶段 | 操作 | 通过条件 |
|---|---|---|
| 创建前 | 确认索引名未被占用:GET /_cat/indices/<name>?v | 返回空或 404 |
| 创建 | PUT /<name> 携带 settings | acknowledged=true 且 shards_acknowledged=true |
| 验证 | GET /<name>/_settings | shards/replicas 与请求一致 |
| 删除 | DELETE /<name> | acknowledged=true |
| 恢复验证 | GET /_cat/indices?v 与 GET /_cluster/health | 索引消失,集群健康不变 |
完成以上流程后,你已经掌握了索引创建与删除的最小闭环。后续写入文档前,建议先为索引定义显式 Mapping,避免动态映射产生不符合预期的字段类型。