1. ホーム
  2. マイスル

[解決済み】全文検索エンジンの比較 - Lucene、Sphinx、Postgresql、MySQL?

2022-03-26 11:08:05

質問

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

いくつか候補があります。

  • Lucene/Lucene with Compass/Solr

  • スフィンクス

  • Postgresql 組み込みの全文検索

  • MySQl内蔵の全文検索

選択基準

  • 結果の関連性とランキング
  • 検索およびインデックス作成速度
  • 使いやすさ、Djangoとの統合のしやすさ
  • リソースの要件 - サイトは、以下の場所でホストされます。 VPS そのため、検索エンジンは多くのRAMとCPUを必要としないことが理想的です。
  • スケーラビリティ
  • 関連検索などの追加機能

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

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

解決方法は?

このような場合、「Lucene」(ルシーン)については、私は全く分からないので、どなたかがコメントされているのを見るのは良いことです。

一方、Sphinxはかなり詳しいので、何かお役に立てるかどうか見てみましょう。

  • 結果の関連性ランキングはデフォルトです。お好みで並べ替えを設定し、特定のフィールドに高い重み付けをすることができます。
  • データベースと直接対話するため、インデックスの作成スピードは超高速です。遅いのは、複雑なSQLクエリや、インデックスされていない外部キーなどの問題から来るものです。検索が遅くなったことは一度もありません。
  • 私はRails派なので、Djangoでの実装がどれだけ簡単なのか、全く分かりません。Sphinxのソースに付属しているPython APIはありますが。
  • 検索サービスデーモン(searchd)はメモリ使用量がかなり少なく、また メモリ量 インデクサープロセスも使用します。
  • しかし、インデックスファイルを複数のマシンにコピーし、複数のsearchdデーモンを実行するのは簡単なことです。しかし、私が他の人から得た一般的な印象では、高負荷時にはかなり優れているので、複数のマシンでスケールアウトすることは対処する必要がないようです。
  • 他のツールで簡単にできることですが、'did-you-mean' などのサポートはありません。Sphinxは辞書を使って単語のステム処理を行っているので、'driving' と 'drive' (例) は検索では同じものとみなされます。
  • Sphinxはフィールドデータに対するインデックスの部分更新を許可していません。これに対する一般的なアプローチは、最近のすべての変更でデルタインデックスを維持し、すべての変更の後にこれを再インデックス化することです(そしてそれらの新しい結果は1秒か2秒以内に表示されます)。データ量が少ないので、これは数秒のうちに完了することができます。それでも、定期的にメインデータセットのインデックスを再作成する必要があります(どの程度の頻度かはデータのボラティリティによりますが、毎日なのか毎時なのか)。しかし、インデックス作成のスピードが速いので、この作業はかなり楽になります。

あなたの状況にどの程度当てはまるかは分かりませんが Evan WeaverがRailsの一般的な検索オプションのいくつかを比較してくれました。 (Sphinx, Ferret (a port of Lucene for Ruby) and Solr), いくつかのベンチマークを実行しました。役に立つかもしれませんね。

MySQL のフルテキスト検索を深く掘り下げたことはないが、スピードや機能面で Sphinx、Lucene、Solr と競合しないことは知っている。