Elasticsearch のCRUD
いつでもElasticsearchでCRUDが実行できるように自分用のメモです。
ElasticsearchはREST APIを提供しているので、馴染みのある感覚でデータの操作を実行できます。
かといってもCurlで実行するのは辛いのでKibanaのコンソールを使います。
使用バージョン
- Elasticsearch 7.7.1
- Kibana 7.7.1
Create
- Documentの新規作成はPUTもしくはPOSTを利用します。
PUTの場合
PUT /member/_doc/1 { "name": "Beats", "age" : 26, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
{ "_index" : "member", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
またこっちの形式でも結果は同じ
PUT /member/_create/1 { "name": "Beats", "age" : 26, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
POSTの場合
POSTを用いる場合はIDを指定しなくても良いです。指定がない場合は自動採番されます。
POST /member/_doc/ { "name": "Beats", "age" : 26, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
{ "_index" : "member", "_type" : "_doc", "_id" : "4_1FfHcBun3pb7RqaiAK", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 2, "_primary_term" : 1 }
またはこっちの形式でも結果は同じ
POST /member/_create/1 { "name": "Beats", "age" : 26, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
READ
GETの場合
GET /member/_doc/1
{ "_index" : "member", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "name" : "Beats", "age" : 26, "birthday" : "1994-10-29", "blog_url" : "https://beatsbeats.hatenablog.com/", "job" : [ "monk", "developer" ], "favorite_song" : { "title" : "fav_song", "created_at" : "2000-01-01" } } }
こっちの形式を使えばインデックスの名前などのメタデータを除いた形で取得可能です。
GET /member/_source/1
{ "name" : "Beats", "age" : 26, "birthday" : "1994-10-29", "blog_url" : "https://beatsbeats.hatenablog.com/", "job" : [ "monk", "developer" ], "favorite_song" : { "title" : "fav_song", "created_at" : "2000-01-01" } }
UPDATE
フィールドを指定して更新する場合は以下の形式のリクエストを実行します。
POST /member/_update/1 { "doc": { "name": "Beeeats", "age" : 27, "birthday": "1995-10-29", "blog_url": "", "job": ["developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-03"} } }
{ "_index" : "member", "_type" : "_doc", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
Document全体を新たなDocumentに更新する場合は以下の形式のリクエストを実行します。
PUT /member/_doc/1 { "name": "Beats", "age" : 27, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
POST /member/_doc/1 { "name": "Beats", "age" : 27, "birthday": "1994-10-29", "blog_url": "https://beatsbeats.hatenablog.com/", "job": ["monk","developer"], "favorite_song": {"title":"fav_song","created_at":"2000-01-01"} }
DELETE
DELETE /member/_doc/1
{ "_index" : "membe", "_type" : "_doc", "_id" : "1", "_version" : 3, "result" : "deleted", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 2, "_primary_term" : 1 }