
ローカルでelasticsearchを動かし、具体的にどうやって操作するかを理解するための記事です。業務等で触っていく際の足掛かりになれば幸いです。
目次
Elasticsearchとは
以下、公式サイトより引用です。ざっくり言えば、大量のデータを格納し、それを高速に検索/分析ができるエンジンです。
Elasticsearchは、様々なユースケースを解決する分散型RESTful検索/分析エンジンです。データを一元的に格納することで、超高速検索や、関連性の細かな調整、パワフルな分析が大規模に、手軽に実行可能になります。
まずは立ち上げてみよう
Install Elasticsearch with Docker を参考に、dockerでElasticsearchとkibanaを立ち上げます。kibanaはElasticsearchへの問い合わせをGUIで実行/可視化できるツールです。
また、私は端末(Windows)にGit bashをインストールしています。そのため本記事のコマンドはbashとなっています。
というわけで適当にフォルダを作成&移動して、dockerの準備を行います。
$ mkdir test
$ cd test
$ vi docker-compose.yml ※docker-compose.ymlの作成。viコマンドについては割愛。
docker-compose.ymlの中身
version: "3.4"
services:
elasticsearch:
container_name: demo-elasticsearch
image: elasticsearch:8.7.1
ports:
- 9200:9200
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPT=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
kibana:
container_name: demo-kibana
image: kibana:8.7.1
environment:
- "ELASTICSEARCH_HOST=http://elasticsearch:9200"
ports:
- 5601:5601
いくつか設定を行っています。各設定については以下を参照ください。
elasticsearch docker image 参考
“discovery.type” 参考
“bootstrap.memory_lock” 参考
“ES_JAVA_OPT” 参考
“ulimits” 参考
“ELASTICSEARCH_HOST” 参考
いざ起動。
$ docker-compose up -d
うまく起動していればpsコマンドでコンテナの状況を確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd471d64d85c kibana:8.7.1 "/bin/tini -- /usr/" 47 minutes ago Up 47 minutes 0.0.0.0:5601->5601/tcp demo-kibana
a5828aaa0ec7 elasticsearch:8.7.1 "/bin/tini -- /usr/" 47 minutes ago Up 47 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp demo-elasticsearch
elasitcsearchを操作するため、kibana(http://localhost:5601/)にアクセスします。

初回起動時はenrollment-tokenなるものが必要なようです。

指示に従い、create-enrollment-tokenコマンドを発行します。今回はコンテナでelasticsearchを立てているので、コンテナにコマンドを実行させます。.batはwindows実行時のものなので削除して
$ docker exec a5828aaa0ec7 bin/elasticsearch-create-enrollment-token --scope kibana
WARNING: Owner of file [/usr/share/elasticsearch/config/users] used to be [root], but now is [elasticsearch]
WARNING: Owner of file [/usr/share/elasticsearch/config/users_roles] used to be [root], but now is [elasticsearch]
eyJ2ZXIiOiI4LjcuMSIsImFkciI6WyIxNzIuMTguMC4yOjkyMDAiXSwiZmdyIjoiNTY2YzEwNmQ4MjYyZjZkOTI5Zjg5ZjU1N2I0...
※”a5828aaa0ec7″の部分は、docker psコマンドの結果に記載されているdemo-elasticsearchのCONTAINER IDを記載します。
生成したtokenをそのまま貼り付け。

Configure Elasticを押下します。

Verificationが必要とのことで、こちらも指示に従いkibana-verification-codeコマンドを発行します。こちらはkibanaのコンテナで。
$ docker exec bd471d64d85c bin/kibana-verification-code
Your verification code is: 634 0XX
結果を入力してVerifyを押下。

最後の関門です。デフォルトユーザ(elastic)のパスワードをリセットしてパスワードを取得します。
$ docker exec -it a5828aaa0ec7 bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: R8FWqqyAU...
アカパスを入力してログイン!

今回はDevToolsから操作します。


とうとう触れます…!
【index】データ登録
ElasticsearchはREST APIを提供しています。kibanaを通してこのAPIをコールします。Elasticsearchではデータベースのレコードに相当するものをDocumentと表現します。Documentを操作するAPIはDocument APIsにまとめられています。
データ登録はIndex APIで行います。
put demo-index/_doc/1
{
"test":"aaa"
}
左のエリアに記載したら”▶”を押下すると実行され、右側に結果が表示されます。

登録したデータを検索してみましょう。検索はSearch APIを使います。
get demo-index/_search
{
"query":{
"match": {
"test": "aaa"
}
}
}

実行すると、検索結果が右に表示されます。hitsの下が実際のデータで、_source配下に先ほど登録したデータが格納されています。
Elasticsearchはデータベースでいるcreate tableを行わなくてもデータの登録が可能です。データの方も自動で判定してくれています。データベースでいうテーブルはElasticsearchではindexと表現されます。テーブル定義、つまりindex定義はmappingと表現されます。
ついでに自動で生成されたindexの定義を見てみましょう。Get Index APIを使用します。
get demo-index

type:textで作成されています。というわけでCRUDの残りを。
【update】データ更新
Update APIを使用します。
POST demo-index/_update/1
{
"script" : {
"source": "ctx._source.test += params.test",
"params" : {
"test" : "bbb"
}
}
}
実行してから検索すると、aaaでは検索できなくなっています。aaabbbだと結果が表示されます。

【delete】データ削除
Delete APIを使用します。
delete demo-index/_doc/1
こちらも実行してから検索すると、存在しなくなってることが確認できます。

【read】データ取得
最後にGet APIを使用して特定Documentの取得を行います。SQLでいうとwhere句でPrimaryKeyを指定するイメージです。
get demo-index/_doc/1
左側9行目の登録を再度行ってから実行すると、データが取得できます。
