Mac に Elasticsearch をインストールして、シンプルなデータ投入・検索・削除をやってみます。
環境
Mac OSX 10.10.2
Java のインストール
まずは Java を入れるところから始めます。
Oracle の Java ダウンロードページより最新の JDK をダウンロードしましょう。
現時点 (2015/05/09) で最新版は 1.8.0_45
なので、 jdk-8u45-macosx-x64.dmg
を選択します。
これはインストーラですので、ダウンロード後はファイルを開いて指示に従っていけば完了します。
ターミナルで確認するとこんな感じ。
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
$ javac -version
javac 1.8.0_45
Elasticsearch のインストール
Elasticsearch のダウンロードページより最新版(現時点で 1.5.2
)をダウンロードします。
ダウンロードした圧縮ファイルを適当なディレクトリに解凍すれば、インストール完了です。
Elasticsearch を起動
ひとまず何も設定せず、そのままの状態で起動させてみます。
以下のコマンドを実行するとフォアグラウンドで立ち上がります。
$ ./bin/elasticsearch
なにやらログが垂れ流され始めますが、デフォルトだと 9200番ポート で立ち上がるようなので、おもむろに curl
してみましょう。
(フォアグラウンドで立ち上げっぱなしで curl
してください)
$ curl http://localhost:9200/
{
"status" : 200,
"name" : "Tarot",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.5.2",
"build_hash" : "62ff9868b4c8a0c45860bebb259e21980778ab1c",
"build_timestamp" : "2015-04-27T09:21:06Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
こんな感じの JSON が返ってくれば起動成功です。
スキーマレスでデータを投入
Elasticsearch では厳密にスキーマを定義できるのですが、一旦はスキーマレスでデータを投入してみましょう。
HTTP で全ての CRUD 操作ができるようで、Create の場合は以下のようなリクエストを投げます。(引き続き curl
を使います)
$ curl -X POST http://localhost:9200/jazzlegend/sample -d '{"name":"Michael Brecker","instrument":"Tenor Sax"}'
こんな感じのレスポンスが返ってくると思います。
(実際には1行で表示されます)
{
"_index": "jazzlegend",
"_type": "sample",
"_id": "AU03oM26TEeGz1vIZ1EY",
"_version": 1,
"created": true
}
http://localhost:9200/jazzlegend/sample
という URL の jazzlegend
の部分が インデックス で、MySQL でいうデータベースのようなものです。
また、sample
の部分は タイプ で、こちらはテーブルのようなものです。
2つとも、存在しない場合は勝手に生成してくれます。
データを検索
CRUD の Read にあたる部分ですが、以下のようなリクエストを投げます。
$ curl -X GET http://localhost:9200/jazzlegend/sample/_search -d '{"query":{"match":{"instrument":"sax"}}}'
先ほど作成したインデックスとタイプに対してクエリを発行しています。今回は「instrument が sax にマッチするもの」です。
これに対する応答は以下のようになりました。
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.19178301,
"hits": [
{
"_index": "jazzlegend",
"_type": "sample",
"_id": "AU03oM26TEeGz1vIZ1EY",
"_score": 0.19178301,
"_source": {
"name": "Michael Brecker",
"instrument": "Tenor Sax"
}
}
]
}
}
ちゃんと検索されました。
大文字小文字や単語の区切りなどが勝手に考慮されて文字列検索されているところが、いかにも全文検索エンジンっぽい振る舞いですね。
データの削除
CRUD の Delete にあたる部分は、以下のようにリクエストします。
$ curl -X DELETE http://localhost:9200/jazzlegend/
{
"acknowledged": true
}
これでインデックスごと削除されました。