4

私は Sphinx 検索エンジンと Thinking Sphinx gem について読んでいます。TSドキュメントでは...

他の多くの検索サービスと比較すると、Sphinx には 1 つの大きな制限があります。インデックス内の単一のドキュメントのフィールドを更新することはできず、そのインデックスのすべてのデータを再処理する必要があります。

私の理解が正しければ、ユーザーが何かを追加または編集しても、その変更はインデックスに反映されません。そのため、レコードを追加しても、インデックス全体が再構築されるまで検索に表示されません。または、レコードを削除する、検索結果に表示され、何らかのエラーや苛立たしい動作が発生します。

さらに、インデックスを再構築している間、Sphinx はシャットダウンされます。そのため、アプリの検索機能は定期的に (1 時間に 1 回、数時間に 1 回) オフラインになり、検索を行おうとすると、エラーまたは「後で試してください」というメッセージが表示されます。

OK、明らかに、実際のアプリでは受け入れられません。したがって、ほとんどの場合、デルタ インデックスを使用する必要があります。

しかし、定期的に検索エンジンをシャットダウンし、完全なインデックス作成を行う必要があるようです...

デルタ インデックス作成をオンにしても、完全な再インデックスを定期的に実行する必要がなくなるわけではありません。そうしないと、デルタ インデックス自体がコア インデックスと同じくらい大きくなり、分離しておく利点がなくなります。また、モデル レコードを変更するサーバーへのリクエストも遅くなります。

ここでドキュメントが何を言っているのかよくわかりません。多分誰かが私を助けることができます。デルタ インデックス作成の要点は、インデックスを定期的に再構築する必要がないことだと思いました。データが変更されるたびに即座に更新されます。

インデックスを 1 時間ごとまたは何かごとに再構築すると、完全にめちゃくちゃになるからですよね?

4

1 に答える 1

12

私の理解が正しければ、ユーザーが何かを追加または編集しても、その変更はインデックスに反映されません。そのため、レコードを追加しても、インデックス全体が再構築されるまで検索に表示されません。または、レコードを削除すると、検索結果に表示され、何らかのエラーや苛立たしい動作が発生します。さらに、インデックスを再構築している間、Sphinx はシャットダウンされます。...

インデックスを再構築する必要はありません。インデックスを再構築するだけです。つまり、デーモンを停止する必要はありません。再構築は、インデックスの構造を変更した後にのみ必要ですが、ここではそうではありません。

2 番目の部分についても、インデックスを再構築しないため、デーモンを停止する必要はありません。デルタ インデックス作成を使用する場合、実際には検索に使用される 2 つのインデックスがあります。メイン インデックス (たまに再インデックスする必要があります) とデルタ インデックス (レコードに対する各関連操作の後に更新される) です。私がそれを正しく理解していれば、メイン インデックスを再インデックス化するとき (たとえば、cron タスクを介して)、デルタ インデックスはメイン インデックスに単純にマージされるため、それほど多くの場所を必要とせず、高速に維持されます。

于 2009-11-23T08:06:55.910 に答える