はじめに
最近、Elasticsearchを使っています。コマンドは基本的にcurlを使っています。しかし、ドキュメントがElasticsearchのバージョンによって違うため探しづらく、curlとJSONを使うので覚えるのも大変だと思ってました。なので、自分でまとめてみました。
index
作成
・ドキュメント
・例
curl -XPUT localhost:9200/hoge
確認
●CAT
・ドキュメント
・例
curl localhost:9200/_cat/indices/hoge
●settings
・ドキュメント
・例
curl localhost:9200/hoge/_settings
更新
●settings
・ドキュメント
・例
curl -XPUT localhost:9200/hoge/_settings -H 'Content-Type: application/json' -d '{
"index": {
"number_of_replicas" : 0
}
}'
●インデックスの名前の変更(reindex)
別名のインデックスが新しく作成されます。
・ドキュメント
・例
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '{
"source": {
"index": "hoge"
},
"dest": {
"index": "new_hoge"
}
}'
削除
・ドキュメント
・例
curl -XDELETE localhost:9200/hoge
alias
作成&更新
●Create or update
・ドキュメント
・例
curl -XPUT localhost:9200/hoge/_alias/hoge-alias
●actions
・ドキュメント
・例
curl -XPOST localhost:9200/_aliases -H 'Content-Type: application/json' -d '{
"actions": [{
"add": {
"index": "hoge",
"alias": "hoge-alias",
"is_write_index": true
}
}]
}'
確認
●CAT
・ドキュメント
・例
curl localhost:9200/_cat/aliases/hoge-alias
●GET
・ドキュメント
・例
curl localhost:9200/_aliases
削除
・ドキュメント
・例
curl -XDELETE localhost:9200/hoge/_alias/hoge-alias
ilm policy
有効化/無効化/ステータス
・ドキュメント
・例
curl -XPOST localhost:9200/_ilm/start #有効化
curl -XPOST localhost:9200/_ilm/stop #無効化
curl localhost:9200/_ilm/status #ステータス
作成&更新
・ドキュメント
curl -XPUT localhost:9200/_ilm/policy/hoge-policy -H 'Content-Type: application/json' -d '{
"policy": {
"phases": {
"delete" : {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}'
確認
・ドキュメント
・例
curl localhost:9200/_ilm/policy/hoge-policy
削除
・ドキュメント
・例
curl -XDELETE localhost:9200/_ilm/policy/hoge-policy
template
作成&更新
・ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-template.html
legacyバージョン(Elasticsearch7.8より前)
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates-v1.html
・例
curl -XPUT localhost:9200/_index_template/hoge-template -H 'Content-Type: application/json' -d '{
"index_patterns": ["hoge"],
"template":{
"settings": {
"index.lifecycle.name": "hoge-policy"
}
}
}'
legacyバージョン(Elasticsearch7.8より前)
curl -XPUT localhost:9200/_template/hoge-template -H 'Content-Type: application/json' -d '{
"index_patterns": ["hoge"],
"settings": {
"index.lifecycle.name": "hoge-policy"
}
}'
確認
・ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-templates.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-template.html
legacyバージョン(Elasticsearch7.8より前)
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-template-v1.html
・例
CAT
curl localhost:9200/_cat/templates/hoge-template
GET
curl localhost:9200/_index_template/hoge-template
legacyバージョン(Elasticsearch7.8より前)
curl localhost:9200/_template/hoge-template
削除
・ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-template.html
legacyバージョン(Elasticsearch7.8より前)
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-template-v1.html
・例
curl -XDELETE localhost:9200/_index_template/hoge-template
legacyバージョン(Elasticsearch7.8より前)
curl -XDELETE localhost:9200/_template/hoge-template
snapshot
作成&更新
●リポジトリ登録
・ドキュメント
・例
curl -XPUT localhost:9200/_snapshot/hoge-repo -H 'Content-Type: application/json' -d '{
"type": "fs",
"settings": {
"location": "/es-backup"
}
}'
●スナップショット取得
・ドキュメント
・例
curl -XPUT localhost:9200/_snapshot/hoge-repo/snapshot_$(date "+%Y%m%d")?wait_for_completion=true -H 'Content-Type: application/json' -d '{
"indices": "hoge"
}'
●レストア
・ドキュメント
・例
curl -XPOST localhost:9200/_snapshot/hoge-repo/snapshot_20221126/_restore?wait_for_completion=true -H 'Content-Type: application/json'
確認
●リポジトリ
・ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-repositories.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/get-snapshot-repo-api.html
・例
CAT
curl localhost:9200/_cat/repositories #repository
curl localhost:9200/_cat/snapshots/hoge-repo #snapshot
GET
curl localhost:9200/_snapshot/hoge-repo #repository
curl localhost:9200/_snapshot/hoge-repo/snapshot_20221126 #snapshot
削除
・ドキュメント
https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-snapshot-repo-api.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/delete-snapshot-api.html
・例
curl -XDELETE localhost:9200/_snapshot/hoge-repo #repository
curl -XDELETE localhost:9200/_snapshot/hoge-repo/snapshot_20221126 #snapshot
health
CAT
curl localhost:9200/_cat/health
GET
curl localhost:9200/_cluster/health
※unassigned shardsの原因について
indexで問題が起きた際に以下のページの手順に従って、原因を調べることができます。
(余談)この記事のDocker環境の構築方法について
コマンドの実行結果を確認するため、Docker環境を構築しました。2022/11/26現在、Docker Composeはプラグイン化しており、インストール方法が変わっているためメモします。
サーバーはEC2(Amazon Linux2)とします。
以下のコマンドでDockerとDocker Composeプラグインをインストールします。
echo 'install docker'
DOCKER=docker-20.10.17-1.amzn2.0.1
sudo yum install -y ${DOCKER}
sudo systemctl start docker
sudo usermod -aG docker ec2-user
echo 'install docker compose plugin'
DOCKER_COMPOSE_VERSION="v2.13.0"
curl -o docker-compose -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64
chmod +x docker-compose
sudo mv docker-compose /usr/libexec/docker/cli-plugins/
docker compose version
echo 'alias dk="docker compose"' >> ~/.bash_profile
Docker Composeのため、以下のyamlファイルでコンテナを定義しました。
services:
es:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.1
ports:
- "29201:9200"
- "29301:9300"
environment:
- "discovery.type=single-node"
- "xpack.security.enabled=false" #Elasticsearch v8からデフォルトでtrueになりました。
- "path.repo=/es-backup"
volumes:
- es-backup:/es-backup
volumes:
es-backup:
driver_opts:
type: none
o: bind
device: /es-backup
以下のコマンドでコンテナを起動します。
alias dk="docker compose" #コマンドが長いのでaliasで省略します。
dk up -d #Elasticsearchコンテナの起動
dk exec es bash #Elasticsearchコンテナにログイン
※参考
https://hub.docker.com/_/elasticsearch
おわりに
今回は自分がよく使うコマンドをまとめました。打つコマンドが長いと指が痛くなったり、思い出すことに時間を取られたりしてしまうと思います。楽に作業する工夫を今後考えていきたいと思いました。