全文検索エンジンの比較 - Lucene、Sphinx、Postgresql、MySQL? [closed] 質問する

全文検索エンジンの比較 - Lucene、Sphinx、Postgresql、MySQL? [closed] 質問する

Django サイトを構築しており、検索エンジンを探しています。

いくつかの候補:

  • Lucene/Lucene と Compass/Solr

  • スフィンクス

  • Postgresql 組み込み全文検索

  • MySQl 組み込み全文検索

選択基準:

  • 結果の関連性とランキング
  • 検索とインデックス作成の速度
  • 使いやすさとDjangoとの統合のしやすさ
  • リソース要件 - サイトは仮想通貨理想的には、検索エンジンは多くのRAMとCPUを必要としません。
  • スケーラビリティ
  • 「もしかして?」や関連検索などの追加機能

上記の検索エンジン、またはリストにない他のエンジンを使用した経験のある方、ご意見をお聞かせください。

編集: インデックス作成の必要性については、ユーザーがサイトにデータを入力し続けると、それらのデータは継続的にインデックス化される必要があります。リアルタイムである必要はありませんが、理想的には新しいデータが 15 ~ 30 分以内にインデックスに表示される必要があります。

ベストアンサー1

Lucene について誰かがコメントしてくれたのは良かったです。私にはそれについて全く分かりませんから。

一方、スフィンクスについては、私はよく知っているので、何かお役に立てるかどうか見てみましょう。

  • 結果の関連性のランキングはデフォルトです。必要に応じて独自の並べ替えを設定したり、特定のフィールドに高い重み付けを与えたりすることができます。
  • インデックス作成の速度は、データベースと直接通信するため、非常に高速です。速度低下は、複雑な SQL クエリやインデックス化されていない外部キーなどの問題によって発生します。検索でも速度低下を感じたことはありません。
  • 私は Rails の人間なので、Django で実装するのがどれほど簡単かはわかりません。ただし、Sphinx ソースには Python API が付属しています。
  • 検索サービスデーモン(searchd)はメモリ使用量が非常に少なく、制限を設定することができます。メモリはどれくらいインデクサープロセスでも使用されます。
  • スケーラビリティについては私の知識があまりありませんが、インデックス ファイルを複数のマシンにコピーして、複数の searchd デーモンを実行するのは簡単です。ただし、他の人から得た一般的な印象では、高負荷でも非常に優れているため、複数のマシンにスケールアウトすることは、対処する必要のあるものではありません。
  • 「did-you-mean」などのサポートはありませんが、他のツールを使用すれば簡単に実行できます。ただし、Sphinx は辞書を使用して単語の語幹を抽出します。そのため、検索では「driving」と「drive」 (例) は同じとみなされます。
  • ただし、Sphinx ではフィールド データの部分的なインデックス更新は許可されません。一般的なアプローチは、最近の変更をすべて含む差分インデックスを維持し、変更のたびにこれを再インデックスすることです (新しい結果は 1 秒か 2 秒以内に表示されます)。データ量が少ないため、これには数秒しかかかりません。ただし、メイン データセットは定期的に再インデックスする必要があります (ただし、どのくらいの頻度で再インデックスするかは、データの変動性によって異なります。毎日か、毎時間か)。ただし、インデックス作成速度が速いため、これはすべて非常に簡単です。

これがあなたの状況にどの程度当てはまるかは分かりませんが、エヴァン・ウィーバーは、Railsの一般的な検索オプションのいくつかを比較した。(Sphinx、Ferret (Ruby 用の Lucene の移植版)、Solr)、いくつかのベンチマークを実行しています。役に立つと思います。

私は MySQL の全文検索を詳細に調べたことはありませんが、速度面でも機能面でも Sphinx、Lucene、Solr に匹敵するものではないことはわかっています。

おすすめ記事