AEM/AEM Formsでのインデックスの破損の回避策と修正
AEM/AEM フォームでインデックスの破損の問題が発生した場合、この記事では、リポジトリに含まれているインデックスデータを削除し、破損したインデックスを再インデックス化する方法を示すことで、この問題を解決するのに役立ちます。
説明 description
環境
Experience Manager Forms
問題/症状
インデックスの破損が発生することは、非常に珍しいケースです。 しかし、それが起こると、次のようなログエントリが表示されます。17.01.2019 17:55:47.374 *WARN* [ pool-118-thread-4] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate [ async] The index update failedorg.apache.jackrabbit.oak.api.CommitFailedException: OakMerge0001: OakMerge0001: Failed to merge changes to the underlying store (retries 5, 5169 ms)at org.apache.jackrabbit.oak.spi.state.AbstractNodeStoreBranch.merge0(AbstractNodeStoreBranch.java:345)at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:156)at org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:160)at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1588)at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.mergeWithConcurrencyCheck(AsyncIndexUpdate.java:581)at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.updateIndex(AsyncIndexUpdate.java:525)at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.runWhenPermitted(AsyncIndexUpdate.java:431)at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:323)at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:115)at org.quartz.core.JobRunShell.run(JobRunShell.java:202)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1164)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:634)
解決策 resolution
誰かがこのような状況に直面した場合、おそらく、この問題を解決する最も速い方法は、リポジトリに含まれているインデックスデータを削除し、破損したインデックスを再インデックス化することです。
注:インデックス再作成は、これらの例では時間とリソースを消費するアクションです。インデックス "workflowDataLucene"を使用します
索引データを削除します:
インデックスデータは、非表示ノードとして/oak:index/workflowDataLuceneの下のリポジトリに配置されているため、破損したインデックスを削除するには、次の手順を実行する必要があります。
- インデックス定義(のみ)を新しい場所にコピーします。
/oak:index/workflowDataLuceneノード構造全体を削除します。/oak:index/workflowDataLuceneを再作成し、インデックスを再作成します。
回避策:
回避策として、インデックスを削除する代わりに、そのインデックスを非アクティブ化し、同じ定義で新しいインデックスを作成できます。
- 破損したインデックスと同じインデックス定義で新しいインデックスを作成する
- 新しいインデックスのトリガーの再インデックス
- type プロパティを「disabled」に変更して、破損したインデックスを非アクティブ化します
変更が完了すると、すべてのクエリが新しいインデックスに移動します
RDBからデータを削除します:
最後の手段として、RDBmkで実行する場合は、次のようなas クエリを使用して、データベースからインデックスデータを直接削除するように分析できます。
DELETE FROM NODESWHEREID ='2:/oak:index/workflowDataLucene' ORIDLIKE '3:/oak:index/workflowDataLucene/%' ORIDLIKE '4:/oak:index/workflowDataLucene/%' ORIDLIKE '5:/oak:index/workflowDataLucene/%' ORIDLIKE '6:/oak:index/workflowDataLucene/%' ORIDLIKE '7:/oak:index/workflowDataLucene/%' ORIDLIKE '8:/oak:index/workflowDataLucene/%' ORIDLIKE '9:/oak:index/workflowDataLucene/%' ORIDLIKE '10:/oak:index/workflowDataLucene/%' OR IDLIKE '5:p/oak:index/workflowDataLucene/%' ORIDLIKE '6:p/oak:index/workflowDataLucene/%' ORIDLIKE '7:p/oak:index/workflowDataLucene/%' '8:p/oak:index/workflowDataLucene/%' ORIDLIKE '9:p/oak:index/workflowDataLucene/%' '10:p/oak:index/workflowDataLucene/%' ORIDLIKE ORIDLIKE ORIDLIKE '12:p/oak:index/workflowDataLucene/%' OR
このパスを使用する場合は、クエリを実行する前に必ず検証してください。変更が必要な場合がありますORIDLIKE'11:p/oak:index/workflowDataLucene/%'
メモ: AEMは、この削除後にAEMを起動する前に、シャットダウンし、ローカルの永続キャッシュおよびインデックスファイル (< crx-quickstart> /repository/cacheおよび< crx-quickstart> /repository/index)を削除する必要があります。