Ruby on Rails で検索するのに最適なオプションは何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/73527

  •  09-06-2019
  •  | 
  •  

質問

Ruby on Rails アプリケーションに検索エンジンを構築するためのプラグイン オプションがいくつかあります。これらのうちどれが一番良いですか?

役に立ちましたか?

解決

Thinking Sphinx には、どのフィールドとどのモデルにインデックスを付けるかを定義するためのより簡潔な構文があります。

UltraSphinx と Thinking Sphinx (最近) には、オブジェクトの地理的近接性を考慮した非常に優れた機能があります。

UltraSphinx には、モデルのロード方法に関する厄介な問題があります (Rails スタック全体をロードしないため、奇妙で診断が難しいエラーが発生する可能性がありますが、これは明示的な追加によって処理されます) require 声明)。

新しいプロジェクトでは Thinking Sphinx を使用し、地理コンテンツを使用するプロジェクトでは UltraSphinx を使用します。

他のヒント

この質問は以前にも行われました ここ より詳細な回答付き。

私の友人の一人が使用している確実なオプションは、 ソルル, 、オリジナルの Java ベースの Lucene を使用する検索エンジン。Rails で使用するには、もちろん、acts_as プラグインがあります。 act_as_solr.

彼は最近このコンボを披露しました モントリオール・オン・レールズ についての素晴らしく徹底的な概要を示します 彼のブログでの act_as_solr の使用方法.

どうやらフランス語のアクセントもうまくサポートしているようです。

私は今まさにこのプロセスを実行しているので、実際の経験はありませんが、すべてのオプションを調査するのに何時間も費やしました。これまでに学んだことは次のとおりです。

  • *Sphinx - 速度と機能性に関しては良い評判ですが、Sphinx には整数キーが必要で、私のモデルは GUID を使用します。ThinkingSphinx は最近、GeoSpatial のサポートを発表しました。
  • Acts_As_Solr - 大規模サイトの友人からの推薦。オリジナルの作成者は作業を停止しており、ドキュメントを見つけるのは困難です。Java サーブレットが必要です
  • Acts_As_Ferret - 使いやすそうだが、不安定だと批判する人が多い
  • 情報が限られている他の 2 つは Acts_As_Indexed と Acts_As_Searchable

それらすべての長所と短所を文書化しようとしたスプレッドシートがあります。誰かがそれを見たい、および/または修正を手伝ってくれるのに興味がある場合は、私に連絡してください。正確な情報が分かり次第、どこかに投稿します。

通常の主キーがある場合は、UltraSphinx または Thinking Sphinx を試してみることをお勧めします。優れたドキュメント、機能セット、プロジェクトの活発さなどに基づいて、Acts_As_Xapian を試してみます。

私は、クライアント プロジェクトで Ferret/acts_as_ferret コンボ (従来の決定) のみを使用しました。を見ることを強くお勧めします 他の まずはオプション。

aaf は非常に脆弱であり、設定を間違えたり、何らかの理由で aaf のバグに遭遇したりすると、Rails アプリがきしみながら停止する可能性があります。

このような場合、単に検索機能が機能しなくなるだけでなく、インデックス付きモデルに触れるコントローラー アクションは完全に失敗し、例外が発生します。どっちがバードだ、うーん?

私が使用するのは、 act_as_xapian プラグイン。私はこのチュートリアルに従いました。

http://locomotivation.com/2008/07/23/simple-ruby-on-rails-full-text-search-using-xapian

非常にうまく機能します。

私はact_as_ferretを使用しています。設定は簡単で、通常は高速です。組み込みのアクティブ レコード検索機能は非常に便利です。検索で一致するレコードが見つかったら、任意の条件を適用したり、他のモデルに結合したりできます。

Sphinx とは異なり、新しいデータを追加するときにすべてのレコードのインデックスを再作成する必要はありません。新しいレコードを ferret データベースに挿入する after_save フックと after_update フックがあります。これは私にとって大きなセールスポイントの 1 つでした。

データに大量のインデックスを付ける必要がある場合、ferret は act_as_sphinx よりも明らかに遅くなります (3 倍)。私は最終的に、Sphinx と同じくらい高速に機能するモデルのインデックスを再作成する独自のメソッドを作成しました。基本的に、レコードごとに新しいインデックスを作成するのではなく、DB からすべてのデータをプリロードします。

ferret のドキュメントは基本的な部分には適していますが、より複雑な検索、並べ替え、リモート インデックスをホストするための dRb サーバーの使用などになると、少し内容が少なくなります。そうは言っても、私は sphinx の経験が限られていますが、acts_as_sphinx よりもはるかに成熟した製品だと感じます。

私のような共有ホスティング サービス (Bluehost) を使用している場合、オプションはプロバイダーが提供するものに限定される可能性があります。私の場合、Lucene や Solr などの別のサーバーを起動して実行し続けるための、適切で信頼性の高い方法が見つかりませんでした。

したがって、私は Xapian を使用しましたが、それは私にとってはうまくいきました。私が調査したレール用のプラグインは 2 つあります。act_as_xapian と xapian_fu。最初のものはすぐに実行できますが、もうメンテナンスされていないようです。xapian_fu を使い始めたところです。

まだ興味がある人のために、今すぐ使用できる最新のものは次のとおりです。 弾性検索. 。次のような利用可能な宝石があります タイヤ または elasticsearch-rails. 。これも Solr と同様に Lucene をベースにしており、Java ベースです。Solr は実際にこのプロジェクトに統合されています...

Thinking Sphinx を使用したことがありますが、非常に優れているように思えますが、すべてのオプションを評価する時間がありませんでした。

シンキングスフィンクスをお勧めします。私の意見では、これが最も速いオプションです。

私は Ferret を使用しており、私の目的にはうまく機能しましたが、他のオプションは評価していません。

私が試していないオプションは、C++ ベースです。 ザピアン

私たちが使っているのは http://hyperestraier.sourceforge.net/, 、それが継承されました。他のエンジンは調べていませんが、Hyperestraier は必要なフックをすべて提供します。ただし、検索インデックスの設定は複雑です。おそらくより簡単なオプションが利用可能です。

使用しているデータベースによって異なります。Solr はあいまい検索のための優れたオプションを多数提供し、優れたクエリ パーサーを備えているため、Solr を使用することをお勧めします。欠点は、別のプロセスを実行する必要があることです。Ferret も使用したことがありますが、インデックスへのマルチスレッド アクセスの点で不安定であることがわかりました。Sphinx は MySQL と Postgres でのみ動作するため、試していません。

私は別のオプションを使用していますが、これは驚くほどうまくいきました。私は jruby を使用しており、lucene と直接通信しています。

私は過去にact_as_solrを使用したことがありますが、いくつかの問題に遭遇しました。主に、AR 保存ごとに同期呼び出しを行います。これはそれほど悪いことではありませんが、私の状況では、保存により solr への多くの同期呼び出しが発生することがあり、場合によっては mongrel が許容するよりも時間がかかり、mongrel タイムアウト例外 (またはそのようなもの) が発生することがありました。

Sphinx は、放棄されたように見える Ultrasphinx よりも優れた代替手段であると考えられていますが、一般に、Xapian は Sphinx よりも強力なエンジンを備えており、リアルタイム検索の実装が容易です。

act_as_ferret をお勧めします。ただし、難しいのはサーバーで正常に起動して実行することですが、ferret サーバーは別のバックグラウンド プロセスとして実行され、新しい更新があるたびにインデックスを更新するため、一度完了するとほとんど問題はありません。また、Apache を使用した雑種でもうまく機能します。

私も完璧な解決策を探していました。最初は Thinking Sphinx を使用しましたが、これはうまくいきました。しかし、私はWebアプリをホストするつもりなので、 Heroku, 、唯一のオプションは使用することです ソルル. 。ただし、最大の欠点は、メインの開発が困難であることです。 act_as_solr gem は 2008 年 5 月以降に停止したようです。だから、それは私の好みには古すぎます。たった今見つけました 黒点 高度な代替手段であり、最近のアップデートも含まれているので、それを検討するつもりです。

Heroku が提供するもう 1 つのオプションは、Solr ベースのホスト型インデックス サーバーを使用することです。 ウェブソル. 。必要な宝石 websolr-acts_as_solr 幸いなことに、非常に最新の状態になっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top