神戸学院大学 経営学部 林坂ゼミ

Docker 入門トップページ

« 戻る 次へ »

Docker 入門

Elasticsearch で全文検索を実行する(macOS版)

インデックスの作成とマッピングの生成

まず,シェル変数に API キーが読み込まれていることを確認します.

elastic-start-local % echo ${ES_LOCAL_API_KEY} ⏎
Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==
elastic-start-local %

まだ読み込まれていなければ次のコマンドを実行してファイル .env からシェル変数に読み込みます.

elastic-start-local % source .env ⏎
elastic-start-local %

目次に戻る

インデックスの作成

Elasticsearch におけるインデックスはドキュメントを保存する場所のことです.ただし,ドキュメントの内容がそのまま保存されるのではなく,ドキュメントを単語(や形態素)に分割したり,転置インデックス情報を作成するなどの処理が行われるため,後に全文検索が効率的に実行できるようになります.

まず,インデックスの一覧を確認するためのコマンドを示します.なおコマンドの最後に ?v というオプションを付与しています.このオプションを付与することで結果に列の見出し行が表示されるようになります.(この違いは ?v オプションを削除して実行すると理解できるでしょう.)

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v"

上のコマンドを実行してみます.その結果は次のとおりです.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v" ⏎
health status index                                                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green  open   .internal.alerts-transform.health.alerts-default-000001            NKllau-fTd2dR4wFu-m95g   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.logs.alerts-default-000001          0zD3qmK9SqaF_cCyw99yDw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.uptime.alerts-default-000001        A6QQM6uJTWO31_hhTD2fpw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-ml.anomaly-detection.alerts-default-000001        0PqACFMhTYqCwlJ_G2gl3A   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.slo.alerts-default-000001           HVUo9bU1S0WpFrXUw-ulBw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-default.alerts-default-000001                     0sPFeD1FSm-9XGtXLIuiCg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-streams.alerts-default-000001                     4uc_s9LeQTSJGebMN0eRwQ   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.apm.alerts-default-000001           yYCuuBOBSYuVZrTUNrzSoA   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-security.attack.discovery.alerts-default-000001   2b3DGBJFQyGlC-8xd2wnJA   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.metrics.alerts-default-000001       xNG4BWeOSZ65ja4d4M-0DQ   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-ml.anomaly-detection-health.alerts-default-000001 H3RsRJryTrS7SBdVVON4rw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.threshold.alerts-default-000001     2OnRi9naQ2awEQ1DAAZG4w   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-security.alerts-default-000001                    NyDlzanySjOBBJgOTwVRcg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-dataset.quality.alerts-default-000001             Oll6iwleQF2GhD9y8QBEHg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-stack.alerts-default-000001                       OM51-wtoTLuThfCDxIMSXw   1   0          0            0       249b           249b         249b
elastic-start-local %

続いて,インデックスを作成するためのコマンドを準備します.ここは「インデックスの箱を作り,その中で日本語検索に最適なルールを定義する」段階です.今回は「小倉百人一首」の情報をドキュメントとして登録することを考えます.したがって,インデックス名は「hyaku_index」とします.

curl -X PUT -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -H "Content-Type: application/json" -d '{
    "settings": {
      "analysis": {
        "analyzer": {
          "hyaku_kuromoji_analyzer": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_baseform",
              "kuromoji_part_of_speech",
              "ja_stop",
              "lowercase"
            ]
          },
          "kana_reading": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_readingform",
              "lowercase"
            ]
          }
        },
        "normalizer": {
          "lowercase_normalizer": {
            "type": "custom",
            "filter": ["lowercase"]
          }
        }
      }
    }
  }' "http://localhost:9200/hyaku_index/"

上の設定の目的は和歌本文 (uta) や作者名 (kajin) を自然な形で全文検索できるようにすることです.また読み仮名でも検索できるようにします.さらに,完全一致検索や集計用に keyword フィールドを正規化しています.

上の analysis セクションで,検索に使うアナライザ (analyzer) を定義しています.これは文字列の分割や正規化処理を行います.具体的には日本語の全文検索に適した形態素解析を行うため,kuromoji をベースにカスタム設定を追加しています.

カスタムアナライザは「kyaku_kuromoji_analyzer」と「kana_reading」です.「kyaku_kuromoji_analyzer」は日本語の文書を検索するためのアナライザです.「kuromoji_tokenizer」は日本語形態素解析のトークナイザ,「kuromoji_baseform」は動詞・形容詞を原型に変換します.「kuromoji_part_of_speech」は記号など不要な品詞を除去します.「ja_stop」日本語の「の」「に」「は」などストップワードを除去します.さらに今回扱う百人一首データでは不要ですが「lowercase」は英字を小文字化します.

次に「kana_reading」は読み仮名検索用のアナライザです.具体的には「kuromoji_readingform」によって読み仮名に変換されます.

さらにノーマライザには「lowercase_normalizer」を指定しています.これはkeyword型フィールド用の正規化設定で,完全一致検索や集計で大文字小文字を区別にしないようにしています.

上のコマンドを実際に実行してインデックスを登録します.

elastic-start-local % curl -X PUT -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -H "Content-Type: application/json" -d '{
    "settings": {
      "analysis": {
        "analyzer": {
          "hyaku_kuromoji_analyzer": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_baseform",
              "kuromoji_part_of_speech",
              "ja_stop",
              "lowercase"
            ]
          },
          "kana_reading": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_readingform",
              "lowercase"
            ]
          }
        },
        "normalizer": {
          "lowercase_normalizer": {
            "type": "custom",
            "filter": ["lowercase"]
          }
        }
      }
    }
  }' "http://localhost:9200/hyaku_index/" ⏎
{"acknowledged":true,"shards_acknowledged":true,"index":"hyaku_index"}%
elastic-start-local %

インデックスの一覧を再び表示して「hyaku_index」が登録されていることを確認します.ただし,ステータスがまだ「yellow(green ではない)」の状態です.この対応は後のステップで行います.現時点では「pri(プライマリ)」の個数が1で「rep(レプリカ)」の個数も1になっていることだけを確認しておいてください.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v" ⏎
health status index                                                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green  open   .internal.alerts-transform.health.alerts-default-000001            NKllau-fTd2dR4wFu-m95g   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.logs.alerts-default-000001          0zD3qmK9SqaF_cCyw99yDw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.uptime.alerts-default-000001        A6QQM6uJTWO31_hhTD2fpw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-ml.anomaly-detection.alerts-default-000001        0PqACFMhTYqCwlJ_G2gl3A   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.slo.alerts-default-000001           HVUo9bU1S0WpFrXUw-ulBw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-default.alerts-default-000001                     0sPFeD1FSm-9XGtXLIuiCg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-streams.alerts-default-000001                     4uc_s9LeQTSJGebMN0eRwQ   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.apm.alerts-default-000001           yYCuuBOBSYuVZrTUNrzSoA   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-security.attack.discovery.alerts-default-000001   2b3DGBJFQyGlC-8xd2wnJA   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.metrics.alerts-default-000001       xNG4BWeOSZ65ja4d4M-0DQ   1   0          0            0       249b           249b         249b
yellow open   hyaku_index                                                        konNIPqBT8yFPK1_lo1uiA   1   1          0            0       227b           227b         227b
green  open   .internal.alerts-ml.anomaly-detection-health.alerts-default-000001 H3RsRJryTrS7SBdVVON4rw   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-observability.threshold.alerts-default-000001     2OnRi9naQ2awEQ1DAAZG4w   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-security.alerts-default-000001                    NyDlzanySjOBBJgOTwVRcg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-dataset.quality.alerts-default-000001             Oll6iwleQF2GhD9y8QBEHg   1   0          0            0       249b           249b         249b
green  open   .internal.alerts-stack.alerts-default-000001                       OM51-wtoTLuThfCDxIMSXw   1   0          0            0       249b           249b         249b
elastic-start-local %

目次に戻る

マッピングの生成

Elasticsearch に登録するドキュメントのドキュメントタイプについて,具体的に各フィールドのデータ構造やデータ型を定義した情報がマッピングです.ここでは「小倉百人一首」のドキュメントタイプをマッピングとして生成します.

上の手順で作成したインデックス「hyaku_index」にはまだマッピングが登録されていないことを確認します.そのためのコマンドは次のとおりです.

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index/_mapping"

実際に上のコマンドを実行します.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index/_mapping" ⏎
{"hyaku_index":{"mappings":{}}}%
elastic-start-local %

なお,コマンドに pretty オプションを付けるとプリティ形式で結果を表示することができます.

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index/_mapping?pretty"

実際にコマンドを実行します.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index/_mapping?pretty" ⏎
{
  "hyaku_index" : {
    "mappings" : { }
  }
}
elastic-start-local %

インデックスの作成ではコマンドの中に様々な情報を埋め込みました.別の方法として JSON ファイルをあらかじめ準備しておき,コマンドにデータとして JSON ファイルを埋め込む方法もあります.ここでは json ディレクトリを作成し,その中に mapping.json ファイルを次のとおり準備します.

json/mapping.json
{
  "properties": {
    "id": {
      "type": "long"
    },
    "uta": {
      "analyzer": "hyaku_kuromoji_analyzer",
      "type": "text",
      "fields": {
        "keyword": { "type": "keyword", "ignore_above": 512 }
      }
    },
    "kana": {
      "analyzer": "hyaku_kuromoji_analyzer",
      "type": "text",
      "fields": {
        "keyword": { "type": "keyword", "ignore_above": 512 }
      }
    },
    "kajin": {
      "type": "text",
      "analyzer": "hyaku_kuromoji_analyzer",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above":128,
          "normalizer": "lowercase_normalizer"
        }
      }
    }
  }
}

なお,今回取り扱う百人一首のドキュメントは次のようなデータ形式になっています.上のマッピングでは「uta」フィールドと「kana」フィールド,「kajin」フィールドについて,「hyaku_kuromoji_analyzer」というカスタムアナライザを利用すると共に,「"keyword"」も設定することで完全一致検索もできるようにしています.

hyaku_data/001.json
{
  "id": "1",
  "uta": "秋の田の かりほの庵の 苫をあらみ わが衣手は 露にぬれつつ",
  "kana": "あきのたの かりほのいほの とまをあらみ わがころもでは つゆにぬれつつ",
  "kajin": "天智天皇"
}

マッピングを生成するためのコマンドを示します.ここで,JSON ファイルを -d オプションで埋め込んでいることに注意してください.

curl -X PUT -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -H "Content-type: application/json" -d @json/mapping.json "http://localhost:9200/hyaku_index/_mapping"

実際にコマンドを実行してマッピングを生成します.

elastic-start-local % curl -X PUT -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -H "Content-type: application/json" -d @json/mapping.json "http://localhost:9200/hyaku_index/_mapping"
{"acknowledged":true}%
elastic-start-local %

マッピングが生成されたことを再び同じコマンドで確認します.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index/_mapping?pretty" ⏎
{
  "hyaku_index" : {
    "mappings" : {
      "properties" : {
        "id" : {
          "type" : "long"
        },
        "kajin" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 128,
              "normalizer" : "lowercase_normalizer"
            }
          },
          "analyzer" : "hyaku_kuromoji_analyzer"
        },
        "kana" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 512
            }
          },
          "analyzer" : "hyaku_kuromoji_analyzer"
        },
        "uta" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 512
            }
          },
          "analyzer" : "hyaku_kuromoji_analyzer"
        }
      }
    }
  }
}
elastic-start-local %

目次に戻る

インデックスの削除

現時点では実行する必要はありませんが,(マッピングも含めて)インデックスごと削除する必要性ができた際には次のコマンドを実行してください.

curl -X DELETE -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/hyaku_index"

目次に戻る

レプリカ数の変更

上の作業でインデックスを作成しましたが,status が yellow であることが気になっていました.ここではその対応を行います.

まず,Elasticsearch が動作する各サーバのことをノードと呼び,複数起動したノードは互いにメッセージを交換して自律的にノードのグループを形成します.このノードグループをクラスタと呼びます.現時点では1つのノードしか起動していないはずなので,クラスタに所属するノードは1つのはずです.次のコマンドはクラスタ全体の健全性を確認するコマンドです.

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/health?v"

実際にコマンドを実行すると次の結果が得られました.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/health?v" ⏎
epoch      timestamp cluster        status node.total node.data shards pri relo init unassign unassign.pri pending_tasks max_task_wait_time active_shards_percent
1736676734 10:12:14  docker-cluster yellow          1         1     32  32    0    0        1            0             0                  -                 97.0%
elastic-start-local %

上で実行したコマンドをもう一度実行します.インデックスはドキュメントを保存する場所ですが,インデックスへの格納はシャードと呼ばれる単位に分割されて各ノードに分散されて保存されます.下の結果の pre = 1, rep = 1hyaku_index というインデックスはプライマリのシャードを1個持ち,レプリカシャードも1個持つという設定になっていることを意味しています.ここで,耐障害性などを考慮してレプリカシャードはプライマリシャードと同じノードには配置できないことになっています.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v" ⏎
health status index                                                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
...(中略)...

yellow open   hyaku_index                                                        konNIPqBT8yFPK1_lo1uiA   1   1          0            0       227b           227b         227b

...(以下略)...
elastic-start-local %

次に,現在のインデックスのシャード構成を確認するコマンドを示します.

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/shards?v"

上のコマンドを実行します.これによって,未割り当てのシャードがどのインデックスに関連しているかを確認します.実行結果を見ると,レプリカシャード(r) が未割り当て (UNASSIGNED) になっていることが分かります.現時点ではサーバ(つまりノード)1台の構成で作業している関係上,レプリカシャードを割り当てるノードは存在しません.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/shards?v" ⏎
index                                                              shard prirep state      docs   store dataset ip         node
.internal.alerts-dataset.quality.alerts-default-000001             0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-stack.alerts-default-000001                       0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.apm-source-map                                                    0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.slo-observability.summary-v3.5                                    0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-ml.anomaly-detection-health.alerts-default-000001 0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.kibana_security_session_1                                         0     p      STARTED       0    247b    247b 172.20.0.2 64da5c780379
.ds-.kibana-event-log-ds-2025.11.24-000001                         0     p      STARTED       7    43kb    43kb 172.20.0.2 64da5c780379
.kibana_ingest_9.2.1_001                                           0     p      STARTED     143 226.5kb 226.5kb 172.20.0.2 64da5c780379
hyaku_index                                                        0     p      STARTED       0    227b    227b 172.20.0.2 64da5c780379
hyaku_index                                                        0     r      UNASSIGNED
.internal.alerts-streams.alerts-default-000001                     0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-observability.slo.alerts-default-000001           0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-transform.health.alerts-default-000001            0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.kibana-siem-rule-migrations-prebuiltrules                         0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.apm-agent-configuration                                           0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-observability.apm.alerts-default-000001           0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-default.alerts-default-000001                     0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.ds-.logs-elasticsearch.deprecation-default-2025.11.24-000001      0     p      STARTED       6  68.6kb  68.6kb 172.20.0.2 64da5c780379
.kibana-siem-rule-migrations-integrations                          0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-observability.logs.alerts-default-000001          0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-ml.anomaly-detection.alerts-default-000001        0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.slo-observability.summary-v3.5.temp                               0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.apm-custom-link                                                   0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.security-7                                                        0     p      STARTED     464 873.2kb 873.2kb 172.20.0.2 64da5c780379
.kibana_locks-000001                                               0     p      STARTED       0    14kb    14kb 172.20.0.2 64da5c780379
.security-profile-8                                                0     p      STARTED       1   8.7kb   8.7kb 172.20.0.2 64da5c780379
.kibana_analytics_9.2.1_001                                        0     p      STARTED       5   1.7mb   1.7mb 172.20.0.2 64da5c780379
.kibana_task_manager_9.2.1_001                                     0     p      STARTED      50 179.7kb 179.7kb 172.20.0.2 64da5c780379
.internal.alerts-security.attack.discovery.alerts-default-000001   0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.ds-ilm-history-7-2025.11.24-000001                                0     p      STARTED      48  25.6kb  25.6kb 172.20.0.2 64da5c780379
.internal.alerts-observability.uptime.alerts-default-000001        0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.ds-.edr-workflow-insights-default-2025.11.24-000001               0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-observability.threshold.alerts-default-000001     0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.kibana_alerting_cases_9.2.1_001                                   0     p      STARTED       1   7.5kb   7.5kb 172.20.0.2 64da5c780379
.internal.alerts-security.alerts-default-000001                    0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.kibana_security_solution_9.2.1_001                                0     p      STARTED       5  39.9kb  39.9kb 172.20.0.2 64da5c780379
.kibana_usage_counters_9.2.1_001                                   0     p      STARTED     272 130.1kb 130.1kb 172.20.0.2 64da5c780379
.slo-observability.sli-v3.5                                        0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.internal.alerts-observability.metrics.alerts-default-000001       0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
.kibana_9.2.1_001                                                  0     p      STARTED      15  40.4kb  40.4kb 172.20.0.2 64da5c780379
.kibana_search_solution_9.2.1_001                                  0     p      STARTED       0    249b    249b 172.20.0.2 64da5c780379
elastic-start-local %

したがって,インデックス「hyaku_index」のレプリカシャードが割り当てられていないため次のコマンドでは status が yellow となりました.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v" ⏎
health status index                                                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
...(中略)...

yellow open   hyaku_index                                                        konNIPqBT8yFPK1_lo1uiA   1   1          0            0       227b           227b         227b

...(以下略)...
elastic-start-local %

したがって,この問題に対応するためとりあえずはレプリカ数を 0 に変更します.そのコマンドは次のとおりです.

curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -XPUT "http://localhost:9200/hyaku_index/_settings" -H "Content-Type: application/json" -d'
{
  "index": {
    "number_of_replicas": 0
  }
}
'

実際にコマンドを実行します.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" -XPUT "http://localhost:9200/hyaku_index/_settings" -d'
{
  "index": {
    "number_of_replicas": 0
  }
}
' ⏎
{"acknowledged":true}%
elastic-start-local %

上の作業でレプリカ数が 0 になったはずです.もう一度インデックスを確認すると,確かにレプリカ数が 0 になっており,その結果 status も green になりました.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/indices?v" ⏎
health status index                                                              uuid                   pri rep docs.count docs.deleted store.size pri.store.size dataset.size
...(中略)...

green  open   hyaku_index                                                        fqejb2_USWqQqQKvY0xFOA   1   0          0            0       227b           227b         227b

...(以下略)...
elastic-start-local %

クラスタ全体の健全性を最後に確認すると,unassign が 0 になり status も green になりました.

elastic-start-local % curl -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}" "http://localhost:9200/_cat/health?v" ⏎
epoch      timestamp cluster        status node.total node.data shards pri relo init unassign unassign.pri pending_tasks max_task_wait_time active_shards_percent
1764214671 03:37:51  docker-cluster green           1         1     40  40    0    0        0            0             0                  -                100.0%
elastic-start-local %

目次に戻る