[解決済み】全文検索エンジンの比較 - 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 と競合しないことは知っている。
関連
-
[解決済み】MySQL: グループ関数の無効な使用
-
[解決済み】1052:フィールドリストの列「id」が曖昧である
-
[解決済み】MySQLユーザーDBにパスワードカラムがない - OSXへのMySQLインストール
-
[解決済み】MySQLエラー1264:カラムの範囲外の値
-
[解決済み】Fatal error: mysqldをrootで実行する方法は、マニュアルの「セキュリティ」セクションをお読みください。
-
[解決済み】mysqladmin: 'localhost'でのサーバーへの接続に失敗しました。
-
[解決済み] ONLY_FULL_GROUP_BYの無効化
-
[解決済み] Mysql: const テーブルを読み込んだ後、不可能な場所に気づいた。
-
[解決済み] dpkg: error processing package mysql-server (dependency problems)?
-
[解決済み] エラーコード1111。グループ関数の無効な使用
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 親の行を削除または更新できない: 外部キー制約に失敗 - MYSQL
-
[解決済み】mysqladmin: 'localhost'でのサーバーへの接続に失敗しました。
-
[解決済み】「docker container run」は最低1つの引数を必要とする
-
[解決済み] SQLZOO - select from world チュートリアル #13
-
[解決済み] WHEREで集計関数は使用できません "というエラーを回避する方法
-
[解決済み] MYSQLのTIMESTAMP比較
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] 各単語の最初の文字を大文字にする(既存のテーブルの場合
-
[解決済み] DEFAULT NULLとCHECKBOX NULL mysqlの違いは何ですか?
-
[解決済み] スタンドアロン型全文検索サーバーの選択。SphinxかSOLRか?[クローズド]