Elasticsearch について
インストールから、よく使われるプラグインを入れて、使い方をざっくりとご紹介したいと思います。
環境
Ubuntu 16.04
Elasticsearch 2.4.6
インストール
$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
$ sudo apt-get update && sudo apt-get install elasticsearch
$ /usr/share/elasticsearch/bin/elasticsearch --version
Version: 2.4.6, Build: 5376dca/2017-07-18T12:17:44Z, JVM: 1.8.0_162
$ sudo update-rc.d elasticsearch defaults 95 10
$ sudo service elasticsearch start
基本的にはここまででOK。
別記事に書く予定ですが、Rails から別仮想マシンにあるElasticsearch を使いたいので、private ip でアクセスできるようにしておきました。
$ sudo vi /etc/elasticsearch/elasticsearch.yml
+ network.host: ["_site_", "_local_", "192.168.33.93"]
また、プロセスのアドレス空間をRAMのサイズ内に抑えるのが以下です。同じファイルに記述します。コメントアウトされているので外します。
- #bootstrap.memory_lock: true + bootstrap.memory_lock: true
次にElasticsearchが使用するメモリについてですが、ここではメモリ 1GB の仮想マシン上で動かすので、512mb ぐらいで設定しておきます。
$ sudo vi /etc/init.d/elasticsearch
ES_HEAP_SIZE=512m
Plugin インストール
kuromoji
日本語の全文検索をするときは大体これをいれればOK
$ sudo /usr/share/elasticsearch/bin/plugin install analysis-kuromoji
elasticsearch-head
Elasticsearch をGUIで管理できるようにするプラグイン。超おすすめ
$ sudo /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
! install したら再起動が必要なり !
使い方
Pluign 一覧取得
$ curl -X GET 'http://[host]:9200/_nodes/plugins?pretty'
インデックス一覧取得
$ curl '[host]:9200/_cat/indices?v'
or
$ curl -XGET '[host]:9200/_aliases?pretty'
既存index の詳細を見る
$ curl '[host]:9200/[index_name]/?pretty'
インデックスを作成とともにタイプとドキュメントまで作成する
$ curl -XPUT '[host]:9200/blog/story/1' -d '{ "title" : "Elasticsearch 特徴まとめ", "subtitle" : "Elasticsearch Features — 主にシステムを中心とした特徴まとめ","contents": "Elasticsearch とは?簡単に説明すると、クラウド向けに構築された、RESTful な APIを提供する分散型のサーチエンジンアプリケーション。オープンソースで提供されています。", "tags" : ["Elasticsearch", "Search-Engine"], "pub_date" : "2014-04-10T01:40:00", "author" : "Kunihiko Kido", "views" : 82, "reads": 60, "read_ratio": 0.73, "enabled": true }'
=>
{"_index":"blog","_type":"story","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}%
手動マッピング
既存のインデックスにデータが既にインデックスされている場合、/_mapping エンドポイントを使って、新しいフィールドタイプを追加することはできますが、更新はできません。
Elasticsearch マッピング – Hello! Elasticsearch. – Medium
index 削除
$ curl -XDELETE '[host]:9200/[index_name]'
json からindex 作成
以下を mapping.json
として保存
{ "settings": { "analysis": { "analyzer": { "my_kuromoji_analyzer": { "type": "custom", "tokenizer": "kuromoji_tokenizer" } } } }, "mappings": { "story" : { "properties" : { "author" : { "type" : "string" }, "contents" : { "type" : "string", "analyzer": "my_kuromoji_analyzer" }, "enabled" : { "type" : "boolean" }, "pub_date" : { "type" : "date", "format" : "dateOptionalTime" }, "read_ratio" : { "type" : "double" }, "reads" : { "type" : "long" }, "subtitle" : { "type" : "string", "analyzer": "my_kuromoji_analyzer" }, "title" : { "type" : "string", "analyzer": "my_kuromoji_analyzer" }, "views" : { "type" : "long" } } } } }
$ curl -XPUT '[host]:9200/blog' -d @mapping.json
Type の中身をみる
$ curl -XGET '[host]:9200/[index_name]/[type_name]/_search?pretty'
クエリメモ
ソート、Limit 等
$ curl -XGET '[host]:9200/[index_name]/[type_name]/_search?pretty' -d ' { "query" : { "match_all" : {} }, "sort" : { "id" : {"order" : "desc"} }, "size" : 1 }'
検索( 単語単位)
$ curl -XGET '[host]:9200/[index_name]/[type_name]/_search?pretty' -d ' { "query" : { "match" : { "title" : { "query" : { "Sample" } } } }, "sort" : { "id" : {"order" : "desc"} }, "size" : 1 }'
あいまい検索
$ curl -XGET '[host]:9200/[index_name]/[type_name]/_search?pretty' -d ' { "query" : { "bool" : { "must" : [{ "wildcard" : { "title" : "*test*" } }] } }, "sort" : { "id" : {"order" : "desc"} }, "size" : 1 }'
一通り、クエリ投げたりして雰囲気つかんだら、上にあげた elasticsearch-head
プラグインをつかってGUI上で操作することをおすすめします。
ブラウザで
http://[host]:9200/_plugin/head/
にアクセスしてみましょう。
Any Request
タブにいって Query から Json を貼り付けて Request ボタン押すと結果が帰ってきます。こっちのほうが遥かに楽ですね。
参考
ElasticsearchでKuromoji Tokenizerを試す
Configuring Elasticsearch On Rails