Elasticsearch / ActiveRecord / Rails / Ruby
この記事はElasticsearch Advent Calendar 2014の3日目です。
2日目は@ariarijpさんの「入門記事:ElasticSearch1.4.0とKibana4.0.0の環境構築」でした。おつかれさまでした。
ではさっそくはじめましょう。
elasticsearch-rails Gemを追加する
Rails Consoleを起動する前にまずGemfileに
を追加します。
bundle install
でelasticsearch-railsをインストールしたら、Rails Consoleを起動します。
Elasticsearch::Modelを組み込む
最初に扱いたいデータのActiveRecordモデルクラスでElasticsearch::Model
をinclude
します。
これでBlog::Site
モデルに一通りメソッドが追加されます。
Elasticsearchにデータをインポートする
Elasticsearchへのインポートにはimport
メソッドを使います。
続いてElasticsearchに問い合わせてインポート結果を確認します。
マッピングを確認する
Elasticsearchに問い合わせるにはインデックス名とタイプ名が必要なので、まずはそちらを確認してみます。
blog-sites
インデックスのsite
タイプとして登録されたようです。
この名前がわかればElasticsearchのAPIにアクセスできるので、インポート結果を確認してみましょう。
マッピングを確認する方法はいくつかあるのですが、今回はperform_request
を使います。
各プロパティがlong
, string
, date
型で登録されていますね。
件数を取得する
続いて件数も見てみましょう。
データを確認する
id=1のデータの中身も見てみます。
ちゃんとデータが取得できました。
フィルタで検索する
続いて検索をしてみましょう。検索にはsearch
メソッドを利用します。
まずはtermフィルタを利用してlanguage
がja
のデータを検索してみます。
2件のデータがヒットしました。
クエリで検索する
続いてmatchクエリでtitle
にElasticsearchを含むデータを検索してみましょう
ちゃんとElasticsearchのデータが検索できました。
アグリゲーションで集計する
次はtermsアグリゲーションでlanguage
毎の件数を集計してみます。
language
がjaのデータが2件という集計結果でした。
インデックスを削除する
一通り動作を確認したので、最後にインデックスを削除します。
削除したらこのままRails Consoleを抜けておしまいです。
まとめ
今回はElasticsearchをRailsから手軽に扱う方法をご紹介しました。
Elasticsearchに慣れた後でも、データベースのデータをサッとElasticsearchに入れて動作確認できると結構便利なのでそういった時にも参考にしていただければ良いかと思います。
もちろんやろうと思えばもっといろんなことができるので、その際はElasticsearchやElasticsearch-railsのドキュメントを見ながら色々試してみてください。
4日目は@tadyさんです。よろしくお願いします。
参考文献