インデックス作成API

新しいインデックスを作成します。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. )
  4. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001'
  3. )
  4. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. });
  4. console.log(response);

コンソール

  1. 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
  • (オプション、オブジェクトのオブジェクト) インデックスのエイリアス。
    1. - `````<alias>
    • (必須、オブジェクト) キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートしています。
      オブジェクトボディにはエイリアスのオプションが含まれています。空のオブジェクトをサポートします。
      1. - `````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

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "index": {
  5. "number_of_shards": 3,
  6. "number_of_replicas": 2
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. index: {
  6. number_of_shards: 3,
  7. number_of_replicas: 2
  8. }
  9. }
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. index: {
  5. number_of_shards: 3,
  6. number_of_replicas: 2,
  7. },
  8. },
  9. });
  10. console.log(response);

コンソール

  1. PUT /my-index-000001
  2. {
  3. "settings": {
  4. "index": {
  5. "number_of_shards": 3,
  6. "number_of_replicas": 2
  7. }
  8. }
  9. }
number_of_shardsのデフォルトは1です
number_of_replicasのデフォルトは1(つまり、各プライマリシャードに対して1つのレプリカ)です

または、より簡略化された形式

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "number_of_shards": 3,
  5. "number_of_replicas": 2
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. number_of_shards: 3,
  6. number_of_replicas: 2
  7. }
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. number_of_shards: 3,
  5. number_of_replicas: 2,
  6. },
  7. });
  8. console.log(response);

コンソール

  1. PUT /my-index-000001
  2. {
  3. "settings": {
  4. "number_of_shards": 3,
  5. "number_of_replicas": 2
  6. }
  7. }
  1. インデックス作成時に設定できるさまざまなインデックスレベルの設定に関する詳細情報は、[インデックスモジュール](/read/elasticsearch-8-15/0dd33dc5c1f7a36a.md)セクションを確認してください。
  2. ### マッピング
  3. create index APIは、マッピング定義を提供することを許可します:
  4. #### Python
  5. ``````python
  6. resp = client.indices.create(
  7. index="test",
  8. settings={
  9. "number_of_shards": 1
  10. },
  11. mappings={
  12. "properties": {
  13. "field1": {
  14. "type": "text"
  15. }
  16. }
  17. },
  18. )
  19. print(resp)
  20. `

Ruby

  1. response = client.indices.create(
  2. index: 'test',
  3. body: {
  4. settings: {
  5. number_of_shards: 1
  6. },
  7. mappings: {
  8. properties: {
  9. "field1": {
  10. type: 'text'
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response

Go

  1. res, err := es.Indices.Create(
  2. "test",
  3. es.Indices.Create.WithBody(strings.NewReader(`{
  4. "settings": {
  5. "number_of_shards": 1
  6. },
  7. "mappings": {
  8. "properties": {
  9. "field1": {
  10. "type": "text"
  11. }
  12. }
  13. }
  14. }`)),
  15. )
  16. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "test",
  3. settings: {
  4. number_of_shards: 1,
  5. },
  6. mappings: {
  7. properties: {
  8. field1: {
  9. type: "text",
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);

コンソール

  1. PUT /test
  2. {
  3. "settings": {
  4. "number_of_shards": 1
  5. },
  6. "mappings": {
  7. "properties": {
  8. "field1": { "type": "text" }
  9. }
  10. }
  11. }

エイリアス

create index APIは、エイリアスのセットを提供することも許可します:

Python

  1. resp = client.indices.create(
  2. index="test",
  3. aliases={
  4. "alias_1": {},
  5. "alias_2": {
  6. "filter": {
  7. "term": {
  8. "user.id": "kimchy"
  9. }
  10. },
  11. "routing": "shard-1"
  12. }
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'test',
  3. body: {
  4. aliases: {
  5. "alias_1": {},
  6. "alias_2": {
  7. filter: {
  8. term: {
  9. 'user.id' => 'kimchy'
  10. }
  11. },
  12. routing: 'shard-1'
  13. }
  14. }
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.indices.create({
  2. index: "test",
  3. aliases: {
  4. alias_1: {},
  5. alias_2: {
  6. filter: {
  7. term: {
  8. "user.id": "kimchy",
  9. },
  10. },
  11. routing: "shard-1",
  12. },
  13. },
  14. });
  15. console.log(response);

コンソール

  1. PUT /test
  2. {
  3. "aliases": {
  4. "alias_1": {},
  5. "alias_2": {
  6. "filter": {
  7. "term": { "user.id": "kimchy" }
  8. },
  9. "routing": "shard-1"
  10. }
  11. }
  12. }

インデックスエイリアス名は日付数学もサポートしています。

Python

  1. resp = client.indices.create(
  2. index="logs",
  3. aliases={
  4. "<logs_{now/M}>": {}
  5. },
  6. )
  7. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'logs',
  3. body: {
  4. aliases: {
  5. "<logs_{now/M}>": {}
  6. }
  7. }
  8. )
  9. puts response

Js

  1. const response = await client.indices.create({
  2. index: "logs",
  3. aliases: {
  4. "<logs_{now/M}>": {},
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT /logs
  2. {
  3. "aliases": {
  4. "<logs_{now/M}>": {}
  5. }
  6. }

アクティブシャードの待機

デフォルトでは、インデックス作成は、各シャードのプライマリコピーが開始されたとき、またはリクエストがタイムアウトしたときにのみクライアントに応答を返します。インデックス作成の応答は、何が起こったかを示します:

コンソール-結果

  1. {
  2. "acknowledged": true,
  3. "shards_acknowledged": true,
  4. "index": "logs"
  5. }
  1. インデックス設定`````index.write.wait_for_active_shards`````を通じて、プライマリシャードの開始を待つだけのデフォルトを変更できます(この設定を変更すると、すべての後続の書き込み操作の`````wait_for_active_shards`````値にも影響します):
  2. #### Python
  3. ``````python
  4. resp = client.indices.create(
  5. index="test",
  6. settings={
  7. "index.write.wait_for_active_shards": "2"
  8. },
  9. )
  10. print(resp)
  11. `

Ruby

  1. response = client.indices.create(
  2. index: 'test',
  3. body: {
  4. settings: {
  5. 'index.write.wait_for_active_shards' => '2'
  6. }
  7. }
  8. )
  9. puts response

Go

  1. res, err := es.Indices.Create(
  2. "test",
  3. es.Indices.Create.WithBody(strings.NewReader(`{
  4. "settings": {
  5. "index.write.wait_for_active_shards": "2"
  6. }
  7. }`)),
  8. )
  9. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "test",
  3. settings: {
  4. "index.write.wait_for_active_shards": "2",
  5. },
  6. });
  7. console.log(response);

コンソール

  1. PUT /test
  2. {
  3. "settings": {
  4. "index.write.wait_for_active_shards": "2"
  5. }
  6. }

またはリクエストパラメータwait_for_active_shardsを通じて:

Php

  1. $params = [
  2. 'index' => 'test',
  3. ];
  4. $response = $client->indices()->create($params);

Python

  1. resp = client.indices.create(
  2. index="test",
  3. wait_for_active_shards="2",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'test',
  3. wait_for_active_shards: 2
  4. )
  5. puts response

Go

  1. res, err := es.Indices.Create("test?wait_for_active_shards=2")
  2. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "test",
  3. wait_for_active_shards: 2,
  4. });
  5. console.log(response);

コンソール

  1. PUT /test?wait_for_active_shards=2

wait_for_active_shardsの詳細な説明とその可能な値はこちらで確認できます。