インデックス作成API
新しいインデックスを作成します。
Python
resp = client.indices.create(
index="my-index-000001",
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001'
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
});
console.log(response);
コンソール
PUT /my-index-000001
リクエスト
PUT /<index>
前提条件
- Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットインデックスに対して
create_index
またはmanage
インデックス権限を持っている必要があります。エイリアスにインデックスを追加するには、エイリアスに対してmanage
インデックス権限を持っている必要があります。
説明
create index APIを使用して、Elasticsearchクラスターに新しいインデックスを追加できます。インデックスを作成する際に、次のことを指定できます:
- インデックスの設定
- インデックス内のフィールドのマッピング
- インデックスエイリアス
パスパラメータ
<index>
- (必須、文字列) 作成したいインデックスの名前。
インデックス名は次の基準を満たす必要があります:- 小文字のみ
\
、/
、*
、?
、"
、<
、>
、|
、,
、#
を含むことはできません- 7.0以前のインデックスはコロン(
:
)を含むことができましたが、これは非推奨となり、7.0以降はサポートされません -
、_
、+
で始めることはできません.
または..
であることはできません- 255バイトを超えることはできません(バイト数であるため、マルチバイト文字は255の制限に早くカウントされます)
.
で始まる名前は非推奨ですが、隠しインデックスおよびプラグインによって管理される内部インデックスを除きます
クエリパラメータ
wait_for_active_shards
- (オプション、文字列) 操作を進める前にアクティブでなければならないシャードコピーの数。
all
またはインデックス内のシャードの総数(number_of_replicas+1
)までの任意の正の整数に設定します。デフォルト:1、プライマリシャード。
アクティブシャードを参照してください。 master_timeout
- (オプション、時間単位) マスターノードを待つ期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーが返されます。デフォルトは
30s
です。リクエストがタイムアウトしないことを示すために-1
に設定することもできます。 timeout
- (オプション、時間単位) クラスターのメタデータを更新した後、クラスター内のすべての関連ノードからの応答を待つ期間。タイムアウトが切れる前に応答が受信されない場合、クラスターのメタデータの更新は適用されますが、応答は完全に承認されなかったことを示します。デフォルトは
30s
です。リクエストがタイムアウトしないことを示すために-1
に設定することもできます。
リクエストボディ
aliases
- (オプション、オブジェクトのオブジェクト) インデックスのエイリアス。
- `````<alias>
- (必須、オブジェクト) キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートしています。
オブジェクトボディにはエイリアスのオプションが含まれています。空のオブジェクトをサポートします。- `````filter
- (オプション、クエリDSLオブジェクト) エイリアスがアクセスできるドキュメントを制限するために使用されるクエリ。
index_routing
- (オプション、文字列) インデックス操作を特定のシャードにルーティングするために使用される値。指定された場合、これはインデックス操作の
routing
値を上書きします。 is_hidden
- (オプション、Boolean)
true
の場合、エイリアスは隠しです。デフォルトはfalse
です。エイリアスのすべてのインデックスは同じis_hidden
値を持っている必要があります。 is_write_index
- (オプション、Boolean)
true
の場合、インデックスはエイリアスの書き込みインデックスです。デフォルトはfalse
です。 routing
- (オプション、文字列) インデックスおよび検索操作を特定のシャードにルーティングするために使用される値。
search_routing
- (オプション、文字列) 検索操作を特定のシャードにルーティングするために使用される値。指定された場合、これは検索操作の
routing
値を上書きします。
mappings
- (オプション、マッピングオブジェクト) インデックス内のフィールドのマッピング。指定された場合、このマッピングには次のものが含まれる可能性があります:
- フィールド名
- フィールドデータ型
- マッピングパラメータ
マッピングを参照してください。
settings
- (オプション、インデックス設定オブジェクト) インデックスの構成オプション。 インデックス設定を参照してください。
例
インデックス設定
作成された各インデックスには、ボディ内で定義された特定の設定を持つことができます:
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"index": {
"number_of_shards": 3,
"number_of_replicas": 2
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
index: {
number_of_shards: 3,
number_of_replicas: 2
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
index: {
number_of_shards: 3,
number_of_replicas: 2,
},
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
}
number_of_shards のデフォルトは1です |
|
number_of_replicas のデフォルトは1(つまり、各プライマリシャードに対して1つのレプリカ)です |
または、より簡略化された形式
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"number_of_shards": 3,
"number_of_replicas": 2
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
number_of_shards: 3,
number_of_replicas: 2
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
number_of_shards: 3,
number_of_replicas: 2,
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
インデックス作成時に設定できるさまざまなインデックスレベルの設定に関する詳細情報は、[インデックスモジュール](/read/elasticsearch-8-15/0dd33dc5c1f7a36a.md)セクションを確認してください。
### マッピング
create index APIは、マッピング定義を提供することを許可します:
#### Python
``````python
resp = client.indices.create(
index="test",
settings={
"number_of_shards": 1
},
mappings={
"properties": {
"field1": {
"type": "text"
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'test',
body: {
settings: {
number_of_shards: 1
},
mappings: {
properties: {
"field1": {
type: 'text'
}
}
}
}
)
puts response
Go
res, err := es.Indices.Create(
"test",
es.Indices.Create.WithBody(strings.NewReader(`{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"field1": {
"type": "text"
}
}
}
}`)),
)
fmt.Println(res, err)
Js
const response = await client.indices.create({
index: "test",
settings: {
number_of_shards: 1,
},
mappings: {
properties: {
field1: {
type: "text",
},
},
},
});
console.log(response);
コンソール
PUT /test
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"field1": { "type": "text" }
}
}
}
エイリアス
create index APIは、エイリアスのセットを提供することも許可します:
Python
resp = client.indices.create(
index="test",
aliases={
"alias_1": {},
"alias_2": {
"filter": {
"term": {
"user.id": "kimchy"
}
},
"routing": "shard-1"
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'test',
body: {
aliases: {
"alias_1": {},
"alias_2": {
filter: {
term: {
'user.id' => 'kimchy'
}
},
routing: 'shard-1'
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "test",
aliases: {
alias_1: {},
alias_2: {
filter: {
term: {
"user.id": "kimchy",
},
},
routing: "shard-1",
},
},
});
console.log(response);
コンソール
PUT /test
{
"aliases": {
"alias_1": {},
"alias_2": {
"filter": {
"term": { "user.id": "kimchy" }
},
"routing": "shard-1"
}
}
}
インデックスエイリアス名は日付数学もサポートしています。
Python
resp = client.indices.create(
index="logs",
aliases={
"<logs_{now/M}>": {}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'logs',
body: {
aliases: {
"<logs_{now/M}>": {}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "logs",
aliases: {
"<logs_{now/M}>": {},
},
});
console.log(response);
コンソール
PUT /logs
{
"aliases": {
"<logs_{now/M}>": {}
}
}
アクティブシャードの待機
デフォルトでは、インデックス作成は、各シャードのプライマリコピーが開始されたとき、またはリクエストがタイムアウトしたときにのみクライアントに応答を返します。インデックス作成の応答は、何が起こったかを示します:
コンソール-結果
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "logs"
}
インデックス設定`````index.write.wait_for_active_shards`````を通じて、プライマリシャードの開始を待つだけのデフォルトを変更できます(この設定を変更すると、すべての後続の書き込み操作の`````wait_for_active_shards`````値にも影響します):
#### Python
``````python
resp = client.indices.create(
index="test",
settings={
"index.write.wait_for_active_shards": "2"
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'test',
body: {
settings: {
'index.write.wait_for_active_shards' => '2'
}
}
)
puts response
Go
res, err := es.Indices.Create(
"test",
es.Indices.Create.WithBody(strings.NewReader(`{
"settings": {
"index.write.wait_for_active_shards": "2"
}
}`)),
)
fmt.Println(res, err)
Js
const response = await client.indices.create({
index: "test",
settings: {
"index.write.wait_for_active_shards": "2",
},
});
console.log(response);
コンソール
PUT /test
{
"settings": {
"index.write.wait_for_active_shards": "2"
}
}
またはリクエストパラメータwait_for_active_shards
を通じて:
Php
$params = [
'index' => 'test',
];
$response = $client->indices()->create($params);
Python
resp = client.indices.create(
index="test",
wait_for_active_shards="2",
)
print(resp)
Ruby
response = client.indices.create(
index: 'test',
wait_for_active_shards: 2
)
puts response
Go
res, err := es.Indices.Create("test?wait_for_active_shards=2")
fmt.Println(res, err)
Js
const response = await client.indices.create({
index: "test",
wait_for_active_shards: 2,
});
console.log(response);
コンソール
PUT /test?wait_for_active_shards=2
wait_for_active_shards
の詳細な説明とその可能な値はこちらで確認できます。