Elasticsearchの基本的な操作などをまとめます。半分メモのようなものです。
間違った解釈があればご指摘いただければ幸いです。
操作方法
CRUD(Create・Read・Update・Delete)はREST APIで行います。REST APIはRailsでよく作るアレです(適当)。
検証はcurlコマンドで行うことができます。
- GET
$ curl -XGET 'http://localhost:9200'
- POST
$ curl -XPOST 'http://localhost:9200/any_index/any_type' \ -H "Content-Type: application/json" -d '"any_key": "any_value"'
僕はkibanaのDev Toolsでやりました。見やすさと触りやすさがこちらの方が良かったためです。(※ここからはGET any/uri
の形で記述します。)
URIの構造とか概念とか
アクセスするURIはindex/type/document
という構造です。
- document
- 保存するデータ一行
- mysqlなどのRDBでいうレコードにあたる
- index
- documentが保存される場所
- type
- 保存されるdocumentがどのような構成かを示す
- 構成の情報のことをマッピングと呼ぶ
GET /my_index/book/hogefuga
とアクセスすると「my_indexというindexに保存してあるbookという情報でマッピングされたdocumentのIDがhogefugaのものを取ってきて」ということになります。
基本的な操作(CRUD)
試しにlibrary/book
にdocumentを入れていじってみます。
作成(POST)
POST library/book { "name": "はらぺこあおむし", "author": "エリック・カール", "price": 1000 } # response { "_index": "library", "_type": "book", "_id": "AWTlLZ5qN5WfoXbACHS2", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true }
typeはElasticsearchが空気を読んで定義してくれています。今回は割愛しますが手動で定義もできます。
更新(PUT)
登録が完了しIDがAWTlLZ5qN5WfoXbACHS2
で登録されているので、更新してみます。
PUT library/book/AWTlLZ5qN5WfoXbACHS2 { "name": "はらぺこあおむし", "author": "エリック・カール", "price": 1200 } # Responce { "_index": "library", "_type": "book", "_id": "AWTlLZ5qN5WfoXbACHS2", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": false }
部分的な更新
PUTを使った更新方法は指定したドキュメント全てを更新します。部分的に更新したい場合はPOSTを使って以下のように行います。doc
の中に更新したい情報を入れるので要注意。
POST library/book/AWTlLZ5qN5WfoXbACHS2/_update { "doc": { "price": 1500 } } # Responce { "_index": "library", "_type": "book", "_id": "AWTlLZ5qN5WfoXbACHS2", "_version": 3, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 } }
取得(GET)
2回更新し、最終的にpriceが1500になったかを確認します。
GET library/book/AWTlLZ5qN5WfoXbACHS2 # Responce { "_index": "library", "_type": "book", "_id": "AWTlLZ5qN5WfoXbACHS2", "_version": 3, "found": true, "_source": { "name": "はらぺこあおむし", "author": "エリック・カール", "price": 1500 } }
確認できました。
削除(DELETE)
最後はふっ飛ばしてみます。
DELETE library/book/AWTlLZ5qN5WfoXbACHS2 # Responce { "found": true, "_index": "library", "_type": "book", "_id": "AWTlLZ5qN5WfoXbACHS2", "_version": 4, "result": "deleted", "_shards": { "total": 2, "successful": 1, "failed": 0 } }
消えていきました。
以上が基本的な操作です。一番肝心な検索はまた後ほどまとめたいと思います。では。