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: インデックスのドキュメントの一部を変更する。

参照