Help us understand the problem. What is going on with this article?

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

More than 5 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
}

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

mserizawa
Web エンジニアやっています。なめろうが好きです。
smarthr
社会の非合理を、ハックする。
https://smarthr.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした