2. 使用 REST API 完成第一个索引的创建与删除

使用 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,通常说明删除过程中有其他索引的分片受到影响,需要进一步排查。

不要在生产环境直接对未知索引执行 DELETE。建议先通过 GET /_cat/indices 确认索引名称,再执行删除;必要时使用索引别名或快照备份作为保护措施。
索引生命周期:创建 → 验证 → 删除 → 状态恢复 客户端 curl / Kibana Dev Tools Elasticsearch 集群 单节点 · 开发环境 PUT /products_v1 settings: shards=1, replicas=0 acknowledged: true · shards_acknowledged: true 索引 products_v1 pri=1 · rep=0 · docs=0 health=green GET /_cat/indices DELETE /products_v1 acknowledged: true 索引已移除 products_v1 不在列表中 cluster health = green 删除后状态恢复 关键判断:创建后 pri/rep 与请求一致 → 删除后索引消失且集群健康不变

可复用的操作清单

阶段操作通过条件
创建前确认索引名未被占用:GET /_cat/indices/<name>?v返回空或 404
创建PUT /<name> 携带 settingsacknowledged=true 且 shards_acknowledged=true
验证GET /<name>/_settingsshards/replicas 与请求一致
删除DELETE /<name>acknowledged=true
恢复验证GET /_cat/indices?v 与 GET /_cluster/health索引消失,集群健康不变

完成以上流程后,你已经掌握了索引创建与删除的最小闭环。后续写入文档前,建议先为索引定义显式 Mapping,避免动态映射产生不符合预期的字段类型。