コンテンツ エディタまたはエクスペリエンス エディタの「マイ アイテム」ダイアログ ボックスは、現在のユーザーがロックされているアイテムを検索し、表示するための機能です。これを実施するには、コンテンツ ツリー全体を検索する必要があります。時間の経過とともにソリューション内のコンテンツの容量が増加し、この操作により多くの時間がかかるようになります。
解決策
Sitecore Platformアーキテクチャでは、特定のフィールド値を持つすべてのアイテムを、いくつかの方法で検索することが可能です。
- Sitecore Query
この処理はSitecoreアプリケーション レベルで実施されることで、全てのアイテムがプロセス メモリに読み込まれ、ビジネスのルール(アクセス制御など)が適用されるようになります。システムのコンテンツの数が多くなるにつれて、より初期処理の時間がかかるようになります。一方、ウォーム キャッシュにより、その後のリクエストがより早く実行されるようになります。
- Sitecore Fast Query
この処理は、直接SQL文に変換され、いくつかのSitecoreロジックをバイパスするため、Sitecore Queryより優れたパフォーマンスを発揮します。コンテンツの数が多くなると、変換されたSQLクエリは汎用フィールド(general-purpose Fields)ビューで処理されるため、実行するのに時間がかかるようになります。ロジックがデータベース レベルで実行されるため、その後のリクエストはSitecoreのキャッシュ レイヤーを十分に活用することができません。
- Content Search
インデックス作成戦略はインデックスを定期的に更新するため、古いデータが表示される可能性があります。また、対象のインデックスは、データベース内のすべてのコンテンツを含めなければならず、1つのバケットにつき1つのインデックスというItem Bucketのコンセプトに反してしまう可能性があります。
要約
Sitecoreアーキテクチャが提供する各アプローチには、それぞれに利点と欠点があります。
- Sitecore.Support.419438.dllアセンブリをダウンロードし、\binフォルダに格納します。
- Sitecore.Support.419438.configファイルをダウンロードし、\App_Config\Include フォルダに格納します。
※この修正プログラムは、Quick Searchインデックスを維持する場合のみ適用することができます。インデックス更新の間隔が「00:00:00」に設定されていないことを確認してください。
<-- INDEX UPDATE INTERVAL
Gets the interval between the IndexingManager checking its queue for pending actions.
Default value: "00:05:00" (5 minutes)
-->
<setting name="Indexing.UpdateInterval" value="00:05:00 />"
- Sitecore.Support.419438.dllアセンブリをダウンロードし、\binフォルダに格納します。
• Sitecore CMS 7.2 ~ XP 8.0の場合:
• Lucene:Sitecore.Support.419438.dll
• Solr:Sitecore.Support.419438.dll
• Sitecore XP 8.1の場合:
• Lucene:Sitecore.Support.419438.dll
• Solr:Sitecore.Support.419438.dll
- Sitecore.Support.419438.configファイルをダウンロードし、\App_Config\Includeフォルダに格納します。
• Sitecore CMS 7.2 ~ XP 8.0の場合:
• Lucene:Sitecore.Support.419438.config
• Solr:Sitecore.Support.419438.config
• Sitecore XP 8.1の場合:
• Lucene:Sitecore.Support.419438.config
• Solr:Sitecore.Support.419438.config
• Sitecore XP 8.0以降の場合:
1) Sitecore.Support.131964.dll アセンブリをダウロードし、\bin フォルダに格納します。
2)Sitecore.Support.131964.configファイルをダウンロードし、\App_Config\Includeフォルダに格納します。
- sitecore_master_indexの再構築を実施します。
- Sitecore XP 8.0 Initial Release以降の場合:
以下のページから影響を受ける製品バージョンと互換性のある修正プログラムをダウンロードしてインストールしてください:
https://github.com/SitecoreSupport/Sitecore.Support.156916/releases.
- Sitecore.Support.131964.dllアセンブリをダウンロードし、\bin フォルダに格納します。
- Sitecore.Support.131964.configファイルをダウンロードし、\App_Config\Include フォルダに格納します。
- 以下のページに掲載されている適切な修正プログラムをダウンロードし、適用します:
https://github.com/SitecoreSupport/Sitecore.Support.156916/releases.
この解決策は、ロックされたアイテムを、SQLのフィルター選択されたインデックスのサポートを受けている軽量のダイレクトSQLクエリでロードするため、無制限のスケーラビリティを実現でき、コンテンツ数が増加してもパフォーマンスを低下させることはありません。
- Sitecore.Support.156916.dllファイルを ダウンロードし、\binフォルダに格納します。
- Sitecore.Support.156916.configファイルをダウロードし、\App_Config\Include フォルダに格納します。
- Sitecore MasterデータベースにSQLのフィルター選択されたインデックスを導入します:
CREATE NONCLUSTERED INDEX IX_Versioned_Locks_Filtered
ON VersionedFields (itemID)
INCLUDE (Value,language,version)
WHERE FieldId='{001DD393-96C5-490B-924A-B0F25CD9EFD8}' -- this is lock fieldID
- \Website\sitecore\shell\Applications\WebEdit\Dialogs\LockedItems フォルダに移動し、LockedItems.xaml.xmlファイルのx:inherits属性を以下の通り変更します:
<Sitecore.Shell.Applications.WebEdit.Dialogs.LockedItems x:inherits="Sitecore.Support.Shell.Applications.WebEdit.Dialogs.LockedItems.LockedItemsPage,Sitecore.Support.156916">
/App_Config/Sitecore/Experience Editor/Sitecore.ExperienceEditor.config ファイルにて、WebEdit.ShowNumberOfLockedItemsOnButton 値を「false」に設定します:
<setting name="WebEdit.ShowNumberOfLockedItemsOnButton" value="false" />