2

Sitecore.NET 6.6.0 (リビジョン 130404)

このプロジェクトでは、すべてのクエリを実行するために Sitecore.Search.IndexSearchContext を使用しています。具体的には、IndexSearchContext.Searcher メソッドを使用して内部の Lucene サーチャーにアクセスし、それに Lucene クエリを渡します。

同じ IndexSearchContext インスタンスを再利用してすべてのクエリを実行すると、実行されるクエリごとに IndexSearchContext を作成して破棄するよりもはるかに高速であることが (Web 記事と実験を通じて) わかりました。

また、IndexSearchContext は、IndexSearchContext の作成後に行われたインデックスの更新に影響されないことも読みました。このため、共有の IndexSearchContext を破棄し、30 秒ごとに新しいものを作成して、クエリがわずか 30 秒の遅延で最新の結果を取得できるようにしています。このアプローチでは、作成のスレッド セーフを慎重に処理し、共有インデックス サーチャーを破棄する必要があります。

これは物事を行うための安全なアプローチですか?サイトコアでアプリケーション全体のインデックス サーチャーを再利用することはお勧めできませんか?

ありがとう

4

3 に答える 3

3

"publish:end" および "publish:end:remote" (マルチ サーバー環境) に接続し、これらのイベントが発生したときに IndexSearchContext を削除することをお勧めします。最終的には Sitecore 環境にいて、新しいコンテンツが公開されたときにのみ、インデックスが古くなります。確かに、このバージョンの真実は少し単純化されています。実行しているアプリケーションの全容がわからないからです。

于 2013-10-08T08:32:05.673 に答える
3

正直に言うと、多くの IndexSearchContext を生成することによるパフォーマンスの問題は見たことがありません。それを極度に使用しており、非常に最適化された環境が必要でない限り、私はそれをお勧めしません. ロックされたインデックスに関する多くの問題を見てきましたが、HTML キャッシュの問題が発生する可能性もあります (使用されている場合)。

全体として、時期尚早の最適化のように聞こえます。ただし、完全な設定がわからないため、間違っている可能性があります。

于 2013-10-08T22:28:01.893 に答える