Posted at

Mac に Elasticsearch をインストールする

More than 3 years have passed since last update.

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"}}}'

先ほど作成したインデックスとタイプに対してクエリを発行しています。今回は「instrumentsax にマッチするもの」です。

これに対する応答は以下のようになりました。

{

"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
}

これでインデックスごと削除されました。