はじめに
Elasticsearchを使っていて、もやもやした内容を、
メモ書きレベルで、思うがまま書いてみます。
Elasticsearchのドキュメント登録
Elasticsearchの操作は、APIエンドポイントに向かって、
REST APIを用いたリクエストを発行します。
ドキュメント登録リクエストは、HTTPメソッドとして、
POSTまたはPUTを使用できるのは周知のとおりですが、
その違いや使い分けに、モヤモヤ感が。。。
POSTメソッドとPUTメソッドを比較してみた
- 操作対象のドキュメント
- POST:
新規
にドキュメントを作成 - PUT:
既存
のドキュメントが存在したら更新、存在しなかったら作成
- POST:
- ドキュメントIDの指定
- POST: 不要(サーバーが自動採番してくれる)
- PUT: 明示的に指定する必要がある
- 同じリクエストを5回実行したら
- POST: 異なるドキュメントIDでドキュメントが5個作成される
- 1回目: ドキュメントID=1
- 2回目: ドキュメントID=2
- 3回目: ドキュメントID=3
- 4回目: ドキュメントID=4
- 5回目: ドキュメントID=5
- PUT: ドキュメントが1個しか作成されない(ドキュメントID=1)
- ※ 2回目以降は、作成ではなく、同じドキュメントIDが更新されるのみ
- 1回目: ドキュメントID=1を作成
- 2回目: ドキュメントID=1を更新
- 3回目: ドキュメントID=1を更新
- 4回目: ドキュメントID=1を更新
- 5回目: ドキュメントID=1を更新
- POST: 異なるドキュメントIDでドキュメントが5個作成される
- ドキュメント登録リクエストのサンプル
## POST
$ curl -XPOST 'http://host:port/index' -H 'Content-Type: application/json' -d '
{
"field1": "value1",
"field2": "value2",
... ...
}'
## PUT
$ curl -XPUT 'http://host:port/index/1' -H 'Content-Type: application/json' -d '
{
"field1": "value1",
"field2": "value2",
... ...
}'
おわりに
Elasticsearchのドキュメント登録方法として、
POSTメソッドとPUTメソッドの違いが理解できたので、
今後は迷わず使用できそうです。