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

ElasticSearchとは?

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

ElasticSearchの導入メリット

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

ElasticSearchを入れる

Javaのinstall

brew install java

ElasticsSearchのinstall

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

kibanaのinstall

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

brew install homebrew/versions/kibana44

kibanaのplugin Senseをinstall

/usr/local/opt/kibana44/bin/kibana plugin --install elastic/sense

Elasticsearchの起動

/usr/local/bin/elasticsearch

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

kibanaの起動

/usr/local/bin/kibana

こちらは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の作成

PUT http://localhost:9200/sample_index/_mapping/user
 {
    "user" : {
        "properties" : {
           "name" : {"type" : "string" },
            "message" : {"type" : "string"}
        }
    }
}

%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

検索してみる

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

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