Elasticsearch CRUD 操作 + Bulk API
Elasticsearch は、次のようなプログラムから REST API を呼び出して操作できる。
- Kibana Dev Tools
- cURL
- その他
CRUD 操作 + Bulk API
Elasticsearch の REST API では、ドキュメントに対して次の CRUD 操作が可能である。
| REST API | 対応する CRUD | 説明 |
|---|---|---|
| Index API | Create | ドキュメントをインデックスに追加 |
| Get API | Read | ドキュメントを照会 |
| Update API | Update | ドキュメントを変更 |
| Delete API | Delete | ドキュメントを削除 |
これらは Single document APIs と呼ばれ、1 回の API 呼び出しで 1 つのドキュメントを処理する。
1 回の API 呼び出しで複数のドキュメントを処理するには Bulk API を使用する。
Index API (Create)
Index API を使用して Elasticsearch インデックスにドキュメントを追加する。
Index API の使い方は次のとおりである。
Index API 使用 (curl 使用)
curl "localhost:9200/2021-12-tweet/_doc/1?pretty" -XPUT -H "Content-Type: application/json" -d '
{
"date":"2021/12/13 09:00 KST",
"Tweet":"트위터를 시작했습니다.",
"User ID":"devkuma"
}'
Index API 使用 (Kibana 使用)
PUT /2021-12-tweet/_doc/1
{
"date":"2021/12/13 09:00 KST",
"Tweet":"트위터를 시작했습니다.",
"User ID":"devkuma"
}
Kibana の Dev Tools を使用する場合は、上記のコマンドを貼り付け、右上の三角ボタンを押す。
データストリームにドキュメントを追加する場合
データストリームとは、複数のインデックスを 1 つにまとめたものである。
データストリームの詳細は、以下の公式ドキュメントを参照してほしい。
Data streams | Elasticsearch Guide [7.16] | Elastic
データストリームにドキュメントを追加するには、次のように REST API を使用する。
Index API 使用 (Kibana 使用)
PUT /tweet/_create/1
{
"date" : "2021/12/13 09:00 KST",
"Tweet" : "트위터를 시작했습니다.",
"User ID" : "devkuma"
}
Get API (Read)
Get API を使用して作成したドキュメントを照会する。
Get API 使用 (curl 使用)
curl "localhost:9200/2021-12-tweet/_doc/1?pretty"
Get API 使用 (Kibana 使用)
GET /2021-12-tweet/_doc/1
上記コマンドの応答
{
"_index" : "2021-12-tweet",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"date" : "2021/12/13 09:00 KST",
"Tweet" : "트위터를 시작했습니다.",
"User ID" : "devkuma"
}
}
Update API (Update)
Update API を使用してドキュメントを修正する。
Update API 使用 (curl 使用)
curl "localhost:9200/2021-12-tweet/_update/1?pretty" -XPOST -H "Content-Type: application/json" -d '
{
"doc" : {
"date" : "2021/12/13 09:00 KST",
"Tweet" : "문서를 업데이트했습니다.",
"User ID" : "devkuma"
}
}'
Update API 使用 (Kibana 使用)
POST /2021-12-tweet/_update/1
{
"doc" : {
"date" : "2021/12/13 09:00 KST",
"Tweet" : "문서를 업데이트했습니다.",
"User ID" : "devkuma"
}
}
修正結果を Get API で確認する。
Update 結果確認 (curl 使用)
curl "localhost:9200/2021-12-tweet/_doc/1?pretty"
Update 結果確認 (Kibana 使用)
GET /2021-12-tweet/_doc/1
上記コマンドの応答
{
"_index" : "2021-12-tweet",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"date" : "2021/12/13 09:00 KST",
"Tweet" : "문서를 업데이트했습니다.",
"User ID" : "devkuma"
}
}
Delete API (Delete)
Delete API でドキュメントを削除する。
Delete API 使用 (curl 使用)
curl "localhost:9200/2021-12-tweet/_doc/1?pretty" -XDELETE
Delete API 使用 (Kibana 使用)
DELETE /2021-12-tweet/_doc/1
ドキュメントが削除されたことを Get API で確認する。
Delete 結果確認 (curl 使用)
curl "localhost:9200/2021-12-tweet/_doc/1?pretty"
Delete 結果確認 (Kibana 使用)
GET /2021-12-tweet/_doc/1
上記コマンドの応答
{
"_index" : "2021-12-tweet",
"_type" : "_doc",
"_id" : "1",
"found" : false
}
Bulk API(一括処理)
ここまでは REST API で一度に 1 つのドキュメントだけを処理した。
Bulk API を使用すると、REST API で一度に複数のドキュメントを一括処理できる。
Bulk API の使用方法は次のとおりである。
bulk.json の内容
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : { "_id" : "1", "_index" : "test" } }
{ "doc" : { "field2" : "value2" } }
Bulk API 使用 (curl 使用)
curl "localhost:9200/_bulk?pretty" -XPOST --data-binary @bulk.json -H "Content-Type: application/json"
Bulk API 使用 (Kibana 使用)
POST /_bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : { "_id" : "1", "_index" : "test" } }
{ "doc" : { "field2" : "value2" } }
Create、Index、Update の違いは次のとおりである。
- Create: インデックスにドキュメントがない場合に作成する。
- Index: インデックスのドキュメントを置き換える。
- Update: インデックスのドキュメントの一部を変更する。