ゴール
本記事ではElasticsearchの以下の基本操作の中のCRUDを簡単に紹介します
- CRUD
- Search
- query
- aggregation
Elasticsearch
Elasticsearch は オープンソースの全文検索エンジンです。
Apache LuceneをベースとしたJavaで書かれたソフトウェアでElastic社により開発が進められています。
登録したドキュメントから目的の単語を含むドキュメントを高速に検索することができます。
基本的にElasticsearchではRestful APIを使って操作します。
バージョン等
Elasticsearch: 7.6.2
kibana: 7.6.2
※ 簡単にCRUD操作を行うためにKibanaのDevToolsを使用します。
環境準備
環境に関しては以下の投稿に記載の通りで用意しています。
【Elasticsearch入門】環境構築
【Elasticsearch入門】環境構築 Windows編
早速触ります
CRUD
ドキュメントの作成、取得、更新、削除について紹介します。
Create
1. IDを指定してドキュメントを作成する
PUT /{index}/_doc/{Document ID}
{
"key1": "value1",
"key2": {
"key2-1": "value2-1",
"key2-2": "value2-2",
}
}
例
リクエスト
PUT my_index/_doc/1
{
"name": "elasticsearch",
"message": "hello world",
"price": 100
}
レスポンス
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
レスポンスの結果より、"_id" : "1"
のドキュメントが作成されたことがわかります。
このようにIDを指定してドキュメントを作成したい場合にPUTを使用します。
2. IDを指定してせずにドキュメントを作成する
POST /{index}/_doc
{
"key1": "value1",
"key2": {
"key2-1": "value2-1",
"key2-2": "value2-2",
}
}
例
リクエスト
POST my_index/_doc
{
"name": "kibana",
"message": "hello world",
"price": 100
}
レスポンス
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "oJ3HcXMBFnhBnJdYQvy1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
レスポンスの結果より、"_id" : "oJ3HcXMBFnhBnJdYQvy1"
のドキュメントが作成されたことがわかります。
このようにIDを指定せずにドキュメントを作成したい場合にPOSTを使用して自動的にIDが付与されるようにリクエストを投げることができます。
Read
IDを指定してドキュメントを取得する
GET /{index}/_doc/{Document ID}
例
リクエスト
GET my_index/_doc/1
レスポンス
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "elasticsearch",
"message" : "hello world",
"price" : 100
}
}
レスポンスの結果より、"_id" : "1"
のドキュメントが取得されたことがわかります。
また、"_source"
の中身をみることで実際のドキュメントの中身をみることもできます。
Update
1. ドキュメントの更新
PUT /{index}/_doc/{Document ID}
{
"key1": "value1",
"key2": {
"key2-1": "value2-1",
"key2-2": "value2-2",
}
}
例
リクエスト
PUT my_index/_doc/1
{
"name": "elasticsearch2",
"message": "hello world2",
"price": 200
}
レスポンス
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
レスポンスの結果をみると"_version" : 2
の表記により、"_id" : "1"
のドキュメントが更新されたことがわかります。
また、GET my_index/_doc/1
により実際のドキュメントを確認できます。
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "elasticsearch2",
"message" : "hello world2",
"price" : 200
}
}
2. ドキュメントを部分的に更新する
PUTを用いることでドキュメントそのものを更新することができますが、特定のフィールドを部分的に更新することもできます。
POST /{index}/_update/{Document ID}
{
"doc": {
"key1": "value1",
"key2": {
"key2-1": "value2-1",
"key2-2": "value2-2",
}
}
}
例
リクエスト
POST my_index/_update/1
{
"doc": {
"price": 500
}
}
レスポンス
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
レスポンスの結果をみると"_version" : 3
の表記により、"_id" : "1"
のドキュメントが更新されたことがわかります。
また、GET my_index/_doc/1
により実際のドキュメントを確認できます。
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "elasticsearch2",
"message" : "hello world2",
"price" : 500
}
}
"price" : 500
のみが更新されたことがわかるかと思います。
Delete
以下のリクエストで削除を行うことができます。
DELETE {index}
例
リクエスト
DELETE my_index
レスポンス
{
"acknowledged" : true
}