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 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 和Tirgger重新索引。

因應措施:

作為因應措施,您可以停用索引並使用相同的定義建立新索引,而不是刪除索引:

  1. 建立與損毀索引定義相同的新索引
  2. 觸發新索引上的重新索引
  3. 將type屬性變更為「disabled」,停用損毀的索引

完成此變更後,每個查詢都將移至新索引

從RDB刪除資料:

作為最後的手段,如果您執行 RDBmk,您可以使用類似下列的as查詢來分析,以直接從資料庫中刪除索引資料:

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必須關機,且本機持續快取和索引檔案(< crx-quickstart> /repository/cache和 < crx-quickstart> /repository/index)已刪除,接著才啟動AEM。

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