4

同僚がこの質問をしましたが、すぐに解決策を見つけられなかったので、ここに投稿します. 彼はプログラムで Sitecore アイテムをマスター DB に挿入し、その後、インデックスに存在する最初のアイテムに依存する別のアイテムを挿入する必要があります。彼はもともと、その 2 番目のアイテムの挿入が 1 回か 2 回失敗するようにしていましたが、それ以来、コードに手動で一時停止を挿入して、インデックスの時間が追いつくようにしました。より良いですが、完璧ではありません。

彼は、従属アイテムの挿入に進む前に、インデックスが更新されているかどうかを確認する Sitecore の方法があるかどうかを探しています。

Alex Shyba ( http://sitecoreblog.alexshyba.com/2011/04/search-index-troubleshooting.html ) によるこのブログ投稿を見つけました。 master DB (パブリッシュは関係ありません) であり、Alex の記事の最初のいくつかのステップは既にソリューションに実装されています (私はすべてを実行しませんでした)。

4

3 に答える 3

2

自分でアイテムをインデックスに追加してみませんか? そうすれば、UI は完了するまでブロックされます。

item:saved イベントにフックすることでそれを行うことができます。イベント ハンドラーは、データベース クローラーのコードに基づいていると思います。

于 2013-03-26T22:19:38.887 に答える
2

インデックスの追加に依存している場合、最終的にアイテムがインデックスに確実に含まれるようにする唯一の方法は、非同期のインデックス更新に続いてアクションを実行することです。Sitecore 6 では、私が認識している唯一の方法はdatabase:propertychanged event. Alex Shyba は、 HTML キャッシュのクリアに関して、別の記事でこのイベントについて説明しています。

イベント ハンドラーで、挿入されたアイテムとそれをどうするかを知ることが課題になるでしょう。インデックスの更新は非同期ジョブとして実行されるため、この状態情報を伝達するには、ある種のグローバル データ構造が必要です。

他のオプション (より簡単かもしれません) は、インデックス更新への依存を削除する (Sitecore クエリまたは高速クエリを使用) か、アイテムが存在するまでインデックスをポーリングすることです (これは少し醜いです)。

于 2013-03-26T14:02:26.787 に答える
0

依存関係をチェックし、必要に応じて再キューイングするためのラッパーを使用して、2 番目のタスクを「時限タスク」としてキューに入れることを考えましたか? http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2010/11/All-About-Sitecore-Scheduling-Agents-and-Tasks.aspxを参照してください。

于 2013-03-27T16:28:16.120 に答える