2

django-sphinxをセットアップしただけで、うまく機能しています。モデルを検索して、すばらしい結果を得ることができるようになりました。1つの問題は、indexerコマンドを使用して手動でインデックスを作成する必要があることです。つまり、新しいコンテンツを追加するたびに、コマンドラインを手動で押して検索インデックスを再構築する必要があります。それは受け入れられません。

インデクサーコマンドを頻繁に自動的に実行するcronジョブを作成することもできますが、それは最適とは言えません。cronが再度実行されるまで、新しいデータはインデックスに登録されません。さらに、私のサイトにはデータが頻繁に追加されていないため、インデクサーはほとんどの場合不必要に実行されます。

検索可能なdjangoモデルにデータが追加または変更されるたびに、Sphinxインデックスが自動的に再構築されるように設定するにはどうすればよいですか?

4

2 に答える 2

5

検索インデックスを構築するには、基本的に2つの主要な戦略があります。

  1. データベースサーバーの内部にあるインデクサー。レコードが挿入または削除されるときにオンザフライでインデックスを作成します。
  2. データベースの外部にあるインデクサー(RDMSである場合とそうでない場合があるため、ワードサーバーを省略します)。定期的にインデックスを作成します。

最初の戦略には、リアルタイムに近いという明らかな利点がありますが、パフォーマンスに大きな欠点がある可能性があります。内部インデクサーを備えたほとんどのデータベースサーバーにはパフォーマンスの問題があります(または機能が不足しています)。たとえば、スタックオーバーフロー用の2番目のサーバーの追加に関するブログ投稿でSQLServer2008のパフォーマンスの問題について説明しているJeffAtwoodを参照してください。

2番目の戦略はリアルタイムではありませんが、一般的に最高のパフォーマンスを発揮します。残念ながら、これは組み込みではないため、何らかの方法で外部から呼び出す必要があることも意味します。

明らかに、 Sphinxは外部インデクサーであるため、選択の余地はありません。cronまたはその他のスケジューリングメカニズムからスフィンクスインデクサーを呼び出す必要があります。

インデックス作成を高速化するには、cronから頻繁に実行します。それがパフォーマンスの問題を引き起こす場合は、新しいレコードをデルタインデックスに非常に頻繁にインデックス付けしてから、デルタインデックスをプライマリインデックスに定期的にマージするライブアップデート戦略を実装する必要があります。これはDjangoの外部で行われるため、django-sphinxの何にも影響しません。

于 2009-10-31T07:54:13.803 に答える
0

上記は私には正しいように聞こえますが、オブジェクトの保存関数からインデクサーを呼び出すことができることを説明します。

おそらくLOTと呼ばれるでしょうが、うまくいく可能性があります。外部コマンドと同じように呼び出すだけです。

于 2010-04-17T02:46:22.593 に答える