ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

まずはmac上でElasticsearchを使ってみる

高速で全文検索ができるという素晴らしい検索エンジンのElasticsearch。このElasticsearchを使いこなせたらきっと役に立ちそう!

ということもありまして、早めに使ってみたいなと思いましてとりあえずまずはmac上でElasticsearchを使ってみました。

その手順を記録していきます。

 

環境確認

まずはJavaが入っていることを確認します。

[code lang="bash"] $ java -version java version "1.8.0_131" [/code]

自分のPCには1.8.0_131が入っていたのでこのまま進めます。1.8以上が入っていないといけないっぽいです。

 

Elasticsearchのインストール

次にElasticsearchをインストールします。こちらのサイト 書いてありますので、こちらを見ながらやります。

https://www.elastic.co/downloads/elasticsearch

この記事を書いているときのElasticsearchのバージョンは6.2.3だったので、そのバージョンで進めていきます。

[code lang="bash"] $ wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-6.2.3.zip $ tar -xzf elasticsearch-6.2.3.tar.gz $ cd elasticsearch-6.2.3 [/code]

Elasticsearchの日本語プラグインのkuromojiもインストールしていきます。

[code lang="bash"] $ bin/elasticsearch-plugin install analysis-kuromoji [/code]

インストールはこれで終わりです。

さて、実際にElasticsearchを起動させてみましょう。

[code lang="bash"] $ bin/elasticsearch [/code]

1分弱程度で起動が終わると思うので、そしたらhttp://localhost:9200/にアクセスしてみましょう。

以下のようなJSONが出力されると思います。これで完了です。

[code lang="bash"] $ curl http://localhost:9200/ { "name" : "btA8FIj", "cluster_name" : "elasticsearch", "cluster_uuid" : "qtGrfELfTPqvMT2G3zym-g", "version" : { "number" : "6.2.3", "build_hash" : "c59ff00", "build_date" : "2018-03-13T10:06:29.741383Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } [/code]

データの投入

さっそくデータを投入してみたいと思います!

[code lang="bash"]

$ curl -X POST http://localhost:9200/doraemon/character -d '{"name":"doraemon","voice":"mizuta wasabi"}' {"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}

[/code]

エラーが出てしまいました。。どうやらヘッダーにapplication/jsonをつけてあげないといけないみたい。。

[code lang="bash"]

$ curl -H "Content-Type: application/json" -X POST http://localhost:9200/doraemon/character -d '{"name":"doraemon","voice":"mizuta wasabi"}' {"index":"doraemon","type":"character","id":"CajGyWIBhdSaYVlB6suk","version":1,"result":"created","shards":{"total":2,"successful":1,"failed":0},"seq_no":0,"_primary_term":1}

[/code]

データの投入に成功しました!この調子でどんどんデータを入れていきたいと思います。

[code lang="bash"]

$ curl -H "Content-Type: application/json" -X POST http://localhost:9200/doraemon/character -d '{"name":"nobi nobita","voice":"ohara megumi"}' {"index":"doraemon","type":"character","id":"CqjKyWIBhdSaYVlBG8si","version":1,"result":"created","shards":{"total":2,"successful":1,"failed":0},"seq_no":1,"_primary_term":1}

$ curl -H "Content-Type: application/json" -X POST http://localhost:9200/doraemon/character -d '{"name":"nobi tamako","voice":"mitsuishi kotono"}' {"index":"doraemon","type":"character","id":"C6jKyWIBhdSaYVlBU8u8","version":1,"result":"created","shards":{"total":2,"successful":1,"failed":0},"seq_no":0,"_primary_term":1}

$ curl -H "Content-Type: application/json" -X POST http://localhost:9200/doraemon/character -d '{"name":"nobi nobisuke","voice":"tahara aruno"}' {"index":"doraemon","type":"character","id":"DKjKyWIBhdSaYVlBbcsG","version":1,"result":"created","shards":{"total":2,"successful":1,"failed":0},"seq_no":0,"_primary_term":1}

[/code]

ドラえもんが住んでいる家の住人を登録してみました。

データの検索

さて、ここから検索してみます。

nameがnobiという文字列に一致するものを持ってきたいと思います。

[code lang="bash"]

$ curl -H "Content-Type: application/json" -X GET http://localhost:9200/doraemon/character/search -d '{"query":{"match":{"name":"nobi"}}}' |jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 100 582 100 35 24798 1491 --:--:-- --:--:-- --:--:-- 25304 { "took": 6, "timed_out": false, "shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, "max_score": 0.6099695, "hits": [ { "index": "doraemon", "type": "character", "id": "CqjKyWIBhdSaYVlBG8si", "score": 0.6099695, "source": { "name": "nobi nobita", "voice": "ohara megumi" } }, { "index": "doraemon", "type": "character", "id": "C6jKyWIBhdSaYVlBU8u8", "score": 0.2876821, "source": { "name": "nobi tamako", "voice": "mitsuishi kotono" } }, { "index": "doraemon", "type": "character", "id": "DKjKyWIBhdSaYVlBbcsG", "score": 0.2876821, "_source": { "name": "nobi nobisuke", "voice": "tahara aruno" } } ] } }

[/code]

野比家の3人が引っかかりました。

せっかくなのでvoiceがwasabiのものも検索したいと思います。

[code lang="bash"]

$ curl -H "Content-Type: application/json" -X GET http://localhost:9200/doraemon/character/search -d '{"query":{"match":{"voice":"wasabi"}}}' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 320 100 282 100 38 12483 1682 --:--:-- --:--:-- --:--:-- 12818 { "took": 7, "timed_out": false, "shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 0.6931472, "hits": [ { "index": "doraemon", "type": "character", "id": "CajGyWIBhdSaYVlB6suk", "score": 0.6931472, "_source": { "name": "doraemon", "voice": "mizuta wasabi" } } ] } }

[/code]

しっかりと声優が水田さわびさんのドラえもんが引っかかってくれました。

こんな感じで簡単にデータを登録して検索することができました!

こんなにも簡単に全文検索ができると夢が広がりますね!