Ruby on Rails アプリケーションでデータの全文検索を行いたいと考えています。どのようなオプションが存在しますか?
8 に答える
利用可能ないくつかのオプションがあり、それぞれに異なる長所と短所があります。全文検索を追加したい場合は、それぞれを少し調べて試してみて、自分の環境でどれだけうまく機能するかを確認することをお勧めします。
MySQL には、全文検索のサポートが組み込まれています。新しいレコードがデータベースに追加されると、自動的にインデックスが作成され、検索結果で利用できるようになるという意味のオンライン サポートがあります。ドキュメントに詳細があります。
acts_as_tsearch
最近のバージョンのPostgreSQL用の同様の組み込み機能のラッパーを提供します。
他のデータベースについては、他のソフトウェアを使用する必要があります。
Luceneは、Java で作成された人気のある検索プロバイダーです。を使用して、Rails で検索サーバーSolrを介して Lucene を使用できますacts_as_solr
。
Java を使用したくない場合は、Ferretと呼ばれる Lucene から Ruby へのポートがあります。Rails のサポートは、acts_as_ferret
プラグインを使用して追加されます。
Xapianacts_as_xapian
も良い選択肢で、プラグインを使用して Rails でサポートされています。
最後に、私が好む選択肢は、 Ultrasphinxプラグインを使用するSphinxです。これは非常に高速で、データベースの索引付けと検索の方法について多くのオプションがありますが、現在は積極的に保守されていません。
Sphinx 用のもう 1 つのプラグインは、多くの肯定的なフィードバックがあるThinking Sphinxです。Ultrasphinx よりも Thinking Sphinx を使い始める方が少し簡単です。両方のプラグインを調査して、どちらがプロジェクトにより適しているかを判断することをお勧めします。
スフィンクスをお勧めします。Ryan Bates は、Thinking Sphinx プラグインを使用して全文検索ソリューションを作成するための優れたスクリーンキャストを公開しています。
Ferret (Ruby で書かれた Lucene) を使用できます。act_as_ferret mixin を使用して、Rails とシームレスに統合します。「Ferret を Rails と統合する方法」をご覧ください。代替手段はSphinxです。
この他の質問 で、Ruby on Rails のさまざまな検索オプションのリストをまとめています。私たちの質問をどのように組み合わせるか、または組み合わせるかどうかはわかりません。
使用しているデータベースによって異なります。多くの優れたオプションを提供する Solr を使用することをお勧めします。欠点は、別のプロセスを実行する必要があることです。Ferret も使用しましたが、インデックスへのマルチスレッド アクセスに関しては安定性が低いことがわかりました。MySQL と Postgres でしか動作しないため、Sphinx は試していません。
今後の参考のためのメモ: Ultra Sphinx はメンテナンスされなくなりました。考えるスフィンクスはその代わりです。ウルトラスフィンクスが持っていたものを抜粋するなど、現時点ではいくつかの機能が欠けていますが、他の機能でそれを補っています。