AEM/AEM Formsでのインデックスの破損の回避策と修正

AEM/AEM forms でインデックスの破損の問題が発生した場合は、リポジトリに含まれるインデックスデータを削除して破損したインデックスを再インデックス化する方法を説明することで、問題を解決できます。

説明 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 failed org.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 下のリポジトリに非表示ノードとして配置されているので、破損したインデックスを削除するには、次の手順を実行する必要があります。

  1. インデックス定義(のみ)を新しい場所にコピーします。
  2. /oak:index/workflowDataLucene ノード構造全体を削除します。
  3. /oak:index/workflowDataLucene を再作成し、再インデックスをトリガーします。

回避策:

対応策は、インデックスを削除する代わりに、非アクティブ化して、同じ定義で新しいインデックスを作成することです。

  1. 破損しているインデックスと同じインデックス定義で新しいインデックスを作成
  2. 新しいインデックスでトリガーの再インデックスを実行
  3. type プロパティを「disabled」に変更して、破損したインデックスをディアクティベートします。

この変更が完了すると、すべてのクエリが新しいインデックスに移動します。

RDB からデータを削除します。

最後の手段として、RDBmk で実行する場合は、次のようなクエリを使用して、インデックスデータをデータベースから直接削除することを分析できます。

DELETE FROM NODES WHERE
ID = '2:/oak:index/workflowDataLucene' OR ID LIKE '3:/oak:index/workflowDataLucene/%' OR ID LIKE '4:/oak:index/workflowDataLucene/%' OR ID LIKE '5:/oak:index/workflowDataLucene/%' OR ID LIKE '6:/oak:index/workflowDataLucene/%' OR ID LIKE '7:/oak:index/workflowDataLucene/%' OR ID LIKE '8:/oak:index/workflowDataLucene/%' OR ID LIKE '9:/oak:index/workflowDataLucene/%' OR ID LIKE '10:/oak:index/workflowDataLucene/%' OR  
ID LIKE '5:p/oak:index/workflowDataLucene/%' OR ID LIKE '6:p/oak:index/workflowDataLucene/%' OR ID LIKE '7:p/oak:index/workflowDataLucene/%' OR ID LIKE '8:p/oak:index/workflowDataLucene/%' OR ID LIKE '9:p/oak:index/workflowDataLucene/%' OR ID LIKE '10:p/oak:index/workflowDataLucene/%' OR ID LIKE '11:p/oak:index/workflowDataLucene/%' OR ID LIKE '12:p/oak:index/workflowDataLucene/%' OR


このパスを使用する場合は、クエリを実行する前に必ずクエリを検証してください。クエリの変更が必要になる場合があるからです

注意: この削除の後、AEMを起動する前に、AEMをシャットダウンし、ローカルの永続キャッシュとインデックスファイル(< crx-quickstart> /repository/cache および < crx-quickstart> /repository/index)を削除する必要があります。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f