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 に匹敵するものではないことはわかっています。