問題
インデックスの再作成には時間がかかり、何も起こらないように見える場合があります。 コントロールパネルのバーにインデックスの再作成アイコンが表示されるか、パーセンテージが変更されないだけです。
環境
- DXP 7.3
- DXP 7.2
- DXP 7.1
- DXP 7.0
解決
BACKGROUNDTASK テーブルを確認する
taskExecutorClassName
列に ReindexPortalBackgroundTaskExecutor
または ReindexSingleIndexerBackgroundTaskExecutor
が含まれている BackgroundTask
テーブルのレコードを検索します。
-
status
が0
のレコードは、まだキューに入っていない新規タスクを参照しています。 通常、再インデックスではこのようなエントリーはありません。 -
status
が1
のレコードは、それらがまだ進行中であることを意味します。 -
status
が2
のレコードは、 失敗した 再インデックス操作を参照しています。createDate
およびmodifiedDate
フィールドの日付が、インデックスの再作成で問題が発生した時期に近いかどうかを調べます。 -
status
が3
のレコードは、成功した再インデックスタスクを参照しています。 -
status
が4
のレコードは、それらが キューに入っていることを意味しますが、ピックアップされない可能性があるため、レコードを削除して、インデックスの再作成を再度呼び出すことができます。 -
status
が5
のレコードは、 キャンセルされたジョブを参照しています。
BackgroundTask
を削除するには、LiferayのAPIを利用することをお勧めします。
- レコードの backgroundTaskId を取得します。
- スクリプトコンソールからGroovyスクリプトから削除操作を行います。
import com.liferay.portal.background.task.service.BackgroundTaskLocalServiceUtil;
BackgroundTaskLocalServiceUtil.deleteBackgroundTask(backgroundTaskId);
データベースからレコードを手動で削除する場合は、コントロール パネルのサーバー管理からデータベース キャッシュをクリアしてください。
Lock_
テーブルを確認する
未解放の lock
が再インデックス操作を妨げている場合があります。 ReindexPortalBackgroundTaskExecutor*
を key_
としてレコードをクエリすることができます。 実行中のバックグラウンドタスクが無い場合でも(前のセクションを思い出してください)、問題のレコードを削除して、コントロールパネルのサーバー管理からデータベースキャッシュをクリアしてみてください。
重要: ブロックされたBackgroundTasksの削除から開始しない場合、関連するLockレコードを削除してもタスクが継続される可能性があります。
lock
を削除するには、LiferayのAPIを利用することをお勧めします。
- レコードの lockId を取得します。
- スクリプトコンソールからGroovyスクリプトから削除操作を行います。
import com.liferay.portal.lock.service.LockLocalServiceUtil;
LockLocalServiceUtil.deleteLock(lockId);
データベースからレコードを手動で削除する場合は、コントロール パネルの サーバー管理からデータベース キャッシュをクリアしてください。
ロギングを有効にする
コントロールパネル > サーバー管理 > ログレベルに移動します。 これらの2つのクラスを追加し、 DEBUG に設定します。
com.liferay.portal.search.internal.background.task.ReindexStatusMessageSenderImpl
このログは、コンテンツをインデックス化したときにメッセージを出力します。
com.liferay.portal.background.task.internal.messaging.RemoveOnCompletionBackgroundTaskStatusMessageListener
このログは、インデックスジョブがまだ進行中かどうか、完了したかどうかなど、インデックスジョブの状態を知らせてくれます。
また、 INFO レベルで以下のクラスを追加します。
com.liferay.portal.search.internal.SearchEngineInitializer
再インデックスが正常に完了したかどうかの確認
- 再インデックス操作の時間枠からDXPサーバログのインデックス作成に関連した例外はありません。
-
BackgroundTask
テーブルにステータス1または4のレコードがありません。