2013年10月26日土曜日

elasticsearchを試してみた

■環境
CentOS 5.9
Java 1.7.0_05
elasticsearch 0.90.5

■elasticsearchインストール
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.5.tar.gzs
tar xvzf elasticsearch-0.90.5.tar.gz
mv elasticsearch-0.90.5 /usr/local/
cd /usr/local/
ln -s elasticsearch-0.90.5/ elasticsearch

vim /root/.bashrc
export ELASTIC_SEARCH=/usr/local/elasticsearch
export PATH=$ELASTIC_SEARCH/bin:$PATH
source /root/.bashrc

elasticsearch -f
netstat -an | grep 9200
最終的に9200ポートでLISTENしていればインストールおよび起動は完了

■サンプル実行
1. サンプルデータの投入
curl -X POST http://localhost:9200/dictionary/name/1 -d '{"famiry_name":"kaka","first_name":"abc","email" :"sample@sample.email.com","age":20}'
curl -X POST http://localhost:9200/dictionary/name/2 -d '{"famiry_name":"kaka","first_name":"def","email" :"sample@sample.email.com","age":20}'
curl -X POST http://localhost:9200/dictionary/name/3 -d '{"famiry_name":"kaka","first_name":"ghi","email" :"sample@sample.email.com","age":20}'
curl -X POST http://localhost:9200/dictionary/name/4 -d '{"famiry_name":"kaka","first_name":"jkl","email" :"sample@sample.email.com","age":20}'
curl -X POST http://localhost:9200/dictionary/name/5 -d '{"famiry_name":"kaka","first_name":"mno","email" :"sample@sample.email.com","age":20}'
「/hoge/foo/n」のような感じでパスを自由に設定することができます
n の部分は数字を設定する必要があります
最後の数字の n 部分を変えてデータをPUTしないと同じデータをタダ上書きするだけなので注意が必要です

2. サンプルデータの取得(キーワード検索)
curl -X GET http://localhost:9200/dictionary/name/_search -d '{"query":{"match":{"famiry_name":"kaka"}},"size":10,"from":0}'
「/hoge/foo/_search」というパスにリクエストすることで検索することができます
今回はcurlコマンドなので-dでリクエストのbody部分を設定します
1. で登録した全てのデータが返ってくるはずです
sizeとfromはmysqlで言うところのlimitで範囲を指定して取得する場合などに使えます(デフォルトはsize:10, from:0のようです)
クエリの指定方法はたくさんありますので他のクエリの指定方法は以下を参考にしてみてください
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-uri-request.html

3. サンプルデータの取得(部分一致検索、正規表現検索)
curl -X GET http://localhost:9200/dictionary/name/_search -d '{"query":{"regexp":{"famiry_name":"ka.*"}},"size":10,"from":0}'
基本的な指定は2. と同様ですが「match」ではなく「regexp」を使用しております
使用できる正規表現は以下に詳しく記載があります
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html

今回は以上です
elasticsearchはすべてをREST-API経由で実行するツールとなっています
データの検索に特化しており、全文検索や位置検索もできるようになっています
また応用編ですがhadoopにも対応しているので簡単にスケールアウトできるようです(未調査)

次回はelasticsearch用のWeb UI「kibana」でも試してみたいと思います

■Tips
・登録したすべてのルートパス(indexes)を表示する方法
curl -X GET http://localhost:9200/_aliases
・不要なindexesを削除する方法(_riverというindexes配下のデータをすべて削除する)
curl -XDELETE 'http://localhost:9200/_river

■参考

0 件のコメント:

コメントを投稿