Elasticsearchで簡単な検索をしてみる

リンクバルの井上です。
システムのデータの規模が大きくなるにつれて必ず問題になるのが検索パフォーマンスかと思います。
今回はその改善で利用されるLuceneベースの全文検索・解析ができるElasticsearchで簡単なユーザ検索をしてみます

##ElasticSearchとは?
Elastic社提供のLuceneベースのマルチテナント・スキーマレスで
クラウドに最適化されたサーチエンジンサーバー

##ElasticSearchの導入メリット
・全文検索が高速
・導入しやすい
・プラグインが豊富
・RESTfulAPI
・データの可視化が簡単(Kibanaの導入)

##ElasticSearchを入れる

###Javaのinstall

[code lang=text] brew install java
[/code]

###ElasticsSearchのinstall
今回は最新の5.0ではなく2系を使います
brew install homebrew/versions/elasticsearch24

###kibanaのinstall
ElasticSearchにversionを合わせないとエラー起こるのversion指定してinstall

[code lang=text] brew install homebrew/versions/kibana44
[/code]

###kibanaのplugin Senseをinstall

[code lang=text] /usr/local/opt/kibana44/bin/kibana plugin –install elastic/sense
[/code]

###Elasticsearchの起動

[code lang=text] /usr/local/bin/elasticsearch
[/code]

port 9200で起動されるので下記でアクセスできます
http://localhost:9200

###kibanaの起動

[code lang=text] /usr/local/bin/kibana
[/code]

こちらはport5602で起動します
http://localhost:5601

##検索機能を使う

###indexの作成
kibanaのSenseでsample_indexという名のindexを作成します。
““POST sample_index
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-29-12-06-07

###mappingの作成

[code lang=text] PUT http://localhost:9200/sample_index/_mapping/user
{
"user" : {
"properties" : {
"name" : {"type" : "string" },
"message" : {"type" : "string"}
}
}
}
[/code]

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-25-15-43-54

####データの登録
““POST http://localhost:9200/sample_index/user
{
“name”: “user”,
“message”: “user_message”

}
““
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-25-15-43-54

####検索してみる

[code lang=text] GET http://localhost:9200/sample_index/_search?pretty=true
{
"query" : {
"simple_query_string": {
"fields": ["name"],
"query": "test1"
}
}
}
[/code]

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-25-15-57-16

ユーザの検索ができました!
次回はkuromojiを使った日本語全文検索をやりたいと思います
リンクバルではエンジニアを積極募集中です。興味のある方は、こちらまでご応募ください。もちろん、社内の人間と面識があるのでしたら、直接にご連絡いただいてもかまいません。