Rails で全文検索を実装する資料まとめ

Rails アプリケーションで全文検索を実装するための調査を昨晩行ったので、リンク・URLをまとめておきます。Sunspot, Elasticsearch, Think Sphinx, Ransack あたりが候補になりました。

スポンサーリンク

Sunspot(Solr)

Sunspot は Ruby から全文検索システムである Apache Solr を使うためのライブラリ。Apache Solr は Java で書かれているので、動作には Java 環境のインストールが必要。日本語の情報がとても充実しているので、とっつきやすそうです。

Elasticsearch

Elasticsearch は、Solr とともに人気のある全文検索システムで最近勢いがあります。Solr と同様 Apache Lucene をベースにしており、動作には Java 環境が必要。

Google トレンド: elasticsearch, solr

調査の際に読んだ Reddit スレッドでは、Elasticsearch のほうが支持されている模様でした。ただし、Solr に比べると日本語の情報源は格段に少なめです。ruby, python, php, perl 向けに公式ライブラリが公開されています。また、データ形式が json だったり、REST API から操作できたりするので馴染みやすい。MySQL からデータの流し込みもプラグインを使ってできるっぽい。私は、まずは Elasticsearch を試してみようと思います。

あと Rails 向けライブラリで tire というのが有名だったらしく、それ関連の情報が多くヒットするのだけど、tire は2013/9に retire とリネームして引退しているので注意。公式ライブラリを使ってねと Github に説明がありました。

Think Sphinx

Think Sphinx は、Github でスターが沢山付いているし英語圏で人気の模様。ただし、日本語の検索で難あり…との情報を見ました。また日本語ソースの情報が極端に少ないので断念しました。

Ransack

Ransack は ActiveRecord の拡張っぽい gem で、ActiveRecord と同様に通常 Rails で使う DB (MySQLやSQLiteなど) に対してSQLクエリを発行させて使う。Solr や Elasticsearch と違って Java を必要とせずに動作します。さっと資料に目を通したところ、Solr や Elasticsearch より遥かに簡単そうです。小さめのDBであればこれで十分そう。Elasticsearch ではまったら Ransack を試してみよう。サイズの大きいDB内のデータが対象の検索用途なので、速度がどうなるか分かりませんが。

全文検索システムの比較、ほか

Github リポジトリ

Solr
https://github.com/sunspot/sunspot
https://github.com/rsolr/rsolr
https://github.com/outoftime/sunspot

Elasticsearch
https://github.com/elasticsearch/elasticsearch-rails
https://github.com/elasticsearch/elasticsearch-ruby

Think Sphinx
https://github.com/pat/thinking-sphinx

ほか
https://github.com/activerecord-hackery/ransack
https://github.com/ankane/searchkick
https://github.com/Casecommons/pg_search
https://github.com/dougal/acts_as_indexed
https://github.com/huacnlee/redis-search

ということで、まずは Elasticsearch にトライしてみます。

高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!