创建索引API

181 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

前言

笔者阅读的文档为elasticsearch-7.11。

请求

PUT /<index>

先决条件

  • 如果启用了Elasticsearch安全功能,则您必须具有目标索引的create_index或manage index权限

描述

您可以使用create index API将新索引添加到Elasticsearch集群。创建索引时,您可以指定以下内容:

  • Settings
  • 字段的Mappings
  • aliases

路径参数

<index>:(Required,string)您要创建的索引的名称。

索引名称必须满足以下条件:

  • 仅小写
  • 不能包含\/*?"<>| (空格字符),,#
  • 7.0之前的索引可以包含冒号(:),但这已经弃用并且在7.0+中不受支持。
  • 不能以-_+开头
  • 不能是...
  • 不能超过255个字节(注意它是字节,所以多字节字符将更快地计入255限制)
  • .开头的名称已弃用,但隐藏索引和由插件管理的内部索引 除外。

查询参数

wait_for_active_shards

(Optional, string) 在继续操作之前必须处于活跃状态的分片副本数。设置为all或任何正整数,最多为索引中的分片总数(number_of_replicas+1)。默认值:1,主分片。

请参阅活动分片

master_timeout

(Optional,time units)等待连接到主节点的时间段。如果在超时到期之前没有收到响应,则请求失败并返回错误。默认为 30s.

timeout

(Optional, time units) 等待响应的时间段。如果在超时到期之前没有收到响应,则请求失败并返回错误。默认为30s

请求体

aliases

(Optional, alias object)包含索引的索引别名。请参阅批量索引别名

mappings

(Optional, mapping object) 索引中字段的映射。如果指定,此映射可以包括:

请参阅映射

settings

(Optional, index setting object) 索引的配置选项。请参阅索引设置

例子

Index settings

创建的每个索引都可以具有与之关联的特定设置,在请求体中定义:

PUT /my-index-000001
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}
  • number_of_shards默认为1
  • number_of_replicas默认为1(即每个主分片一个副本)

或者更简化

PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

有关在创建索引时可以设置的所有不同索引设置标准的更多信息,请查看 索引模块部分。

Mappings

创建索引API允许提供映射定义:

PUT /test
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

Aliases

创建索引 API 还允许提供一组别名

PUT /test
{
  "aliases": {
    "alias_1": {},
    "alias_2": {
      "filter": {
        "term": { "user.id": "kimchy" }
      },
      "routing": "shard-1"
    }
  }
}

等待活跃分片

默认情况下,索引创建仅在每个碎片的主副本已启动或请求超时时才会向客户端返回响应。索引创建响应将指示发生了什么:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "test"
}

acknowledged指示是否在集群中成功创建索引,shards_acknowledged指示是否在超时之前为索引中的每个分片启动了必要数量的分片副本。请注意acknowledgedshards_acknowledged可能是false,但索引创建成功。这些值仅指示操作是否在超时之前完成。如果acknowledged为false,那么在使用新创建的索引更新集群状态之前就超时了,但它可能很快就会被创建。如果shards_acknowledged为false,则在启动所需数量的shards之前(默认情况下,仅初始主分片),即使集群状态已成功更新以响应新创建的索引(acknowledged=true)。

我们可以更改默认设置,即只等待主碎片通过索引设置索引启动。通过index setting index.write.wait_for_active_shards

PUT /test
{
  "settings": {
    "index.write.wait_for_active_shards": "2"
  }
}

或通过请求参数wait_for_active_shards

PUT /test?wait_for_active_shards=2

可以在此处找到的详细说明wait_for_active_shards及其可能值 。

参考

Create index API