Oak-run は、コマンドラインで以下のようなインデックスに関する使用例をサポートします。AEM の JMX コンソールを使用する必要はありません。
oak-run.jar インデックスコマンドを使用して Oak インデックスを管理する全般的なメリットとして、以下のものがあります。
以下の節では、コマンドの例を示します。oak-run インデックスコマンドは、すべての NodeStore および BlobStore 設定をサポートしています。以下では、FileDataStore および SegmentNodeStore を使用した設定の例を紹介します。
これは、インデックスの破損に関連する使用例です。以前は、破損しているインデックスを特定できない場合もありました。このため、次の特長を持つツールが用意されています。
破損しているインデックスのチェックは、--index-consistency-check
操作を使用して実行できます。
java -jar oak-run*.jar index --fds-path=/path/to/datastore /path/to/segmentstore/ --index-consistency-check
これにより、indexing-result/index-consistency-check-report.txt
にレポートが生成されます。サンプルレポートについては、以下を参照してください。
Valid indexes :
- /content/oak:index/enablementResourceName
- /oak:index/cqProjectLucene
- /oak:index/cqTagLucene
- /oak:index/lucene
- /oak:index/ntBaseLucene
- /oak:index/socialLucene
Invalid indexes :
- /oak:index/atDamIndex
- /oak:index/atIndex
- /oak:index/cqPageLucene
- /oak:index/damAssetLucene
- /oak:index/groups
- /oak:index/slingeventJob
- /oak:index/users
- /oak:index/workflowDataLucene
Ignored indexes as these are not of type lucene:
- /oak:index/acPrincipalName
- /oak:index/active
このツールを使用することにより、サポートおよびシステム管理者は、破損しているインデックスをすばやく特定し、これらのインデックスを再作成できるようになりました。
以前は、クエリパフォーマンスに関して診断する場合、お客様のセットアップの既存のインデックス定義やインデックス関連統計が必要になることがありました。これらの情報は、これまで複数のリソースに散在していました。より簡単にトラブルシューティングできるように、次の特長を持つツールが用意されています。
システムに存在するすべてのインデックス定義を 1 つの JSON ファイルにダンプします。
既存のインデックスの重要な統計をダンプします。
オフライン分析のためにインデックスコンテンツをダンプします。
AEM にアクセスできない場合でも使用可能です。
前述の操作は、次の操作用の index コマンドを使用して実行できるようになりました。
--index-info
- インデックスに関連するさまざまな統計を収集してダンプします。
--index-definitions
- インデックス定義を収集してダンプします。
--index-dump
- インデックスコンテンツをダンプします。
コマンドが実際にどのように機能するかについての例は、次を参照してください。
java -jar oak-run*.jar index --fds-path=/path/to/datastore /path/to/segmentstore/ --index-info --index-definitions --index-dump
これらのレポートは、indexing-result/index-info.txt
および indexing-result/index-definitions.json
に生成されます。
また、同じ詳細が Web コンソール経由でも提供され、設定のダンプ zip にも含まれます。この詳細には、次の場所からアクセスできます。
https://serverhost:serverport/system/console/status-oak-index-defn
このツールを使用すると、インデックス作成またはクエリの問題に関連するすべての必要な詳細をすばやく収集できるので、この情報の抽出にかかる時間を短縮できます。
シナリオによっては、インデックス再作成の実行が必要な場合があります。現在、インデックス再作成を行うには、CRXDE またはインデックスマネージャのユーザーインターフェイスを使用して、インデックス定義ノードで reindex
フラグを true
に設定します。このフラグが設定されると、インデックス再作成が非同期的におこなわれます。
次に、インデックス再作成に関するいくつかの注意点を示します。
インデックス再作成を DocumentNodeStore
設定で行うと、すべてのコンテンツがローカルにある SegmentNodeStore
設定で行う場合より、大幅に時間がかかります。
現在の設計では、インデックス再作成中に非同期インデクサーがブロックされます。他のすべての非同期インデックスが古くなり、インデックス作成中に更新が取得されません。このため、システムが使用中の場合は、最新の結果が表示されないことがあります。
インデックス再作成には、リポジトリ全体のトラバーサルが伴います。これは、AEM 設定に大きな負荷がかかる可能性があり、エンドユーザーエクスペリエンスに影響する可能性があります。
DocumentNodeStore
インストールでは、インデックス再作成にかなりの時間がかかる可能性があります。操作中に Mongo データベースへの接続に失敗すると、インデックス作成を最初からやり直す必要があります。
テキストを抽出するので、インデックス再作成に時間がかかる場合があります。これは、主に PDF ファイルが多く含まれる設定に当てはまります。テキスト抽出にかかる時間は、インデックス作成時間に影響する可能性があります。
これらの目的を満たすために、oak-run インデックスツールでは、必要に応じて使用できるインデックス再作成の様々なモードをサポートしています。oak-run インデックスコマンドには、次のメリットがあります。
out-of-band のインデックス再作成 - oak-run のインデックス再作成は、実行中の AEM 設定とは別に実行できるので、使用中の AEM インスタンスへの影響が最小限に抑えられます。
out-of-lane のインデックス再作成 - このインデックス再作成は、インデックス作成操作に影響を与えずに行なわれます。つまり、非同期インデクサーは他のインデックス作成を続行できます。
インストールでの簡略化されたインデックス再作成 - DocumentNodeStore
DocumentNodeStore インストールでは、インデックス再作成が単一のコマンドで実行できます。これにより、インデックス再作成が確実に最適な方法で実行されます。
インデックス定義の更新および新しいインデックス定義の導入のサポート
DocumentNodeStore
インストールでは、単一の oak-run コマンドを使用してインデックス再作成を行うことができます。
java -jar oak-run*.jar index --reindex --index-paths=/oak:index/lucene --read-write --fds-path=/path/to/datastore mongodb://server:port/aem
これには次のメリットがあります。
--index-definitions-file
オプションを使用して新しいインデックスまたは更新されたインデックスの JSON を提供することもできます。SegmentNodeStore
インストールでは、次のいずれかの方法でインデックス再作成を行うことができます。
既定の方法に従い、reindex
フラグを設定してインデックス再作成を行います。
SegmentNodeStore
インストールでは、セグメントファイルに読み取り/書き込みモードでアクセスできるのは 1 つのプロセスのみです。このため、oak-run のインデックス作成の一部の操作では、手動による追加の手順が必要です。
これには、次のものが含まれます。
ステップテキスト
AEM で使用される同じリポジトリに oak-run
を読み取り専用モードで接続し、インデックスを作成します。これを実行する方法の例:
java -jar oak-run-1.7.6.jar index --fds-path=/Users/dhasler/dev/cq/quickstart/target/crx-quickstart/repository/datastore/ --checkpoint 26b7da38-a699-45b2-82fb-73aa2f9af0e2 --reindex --index-paths=/oak:index/lucene /Users/dhasler/dev/cq/quickstart/target/crx-quickstart/repository/segmentstore/
最後に、前述のコマンドを実行した後で、IndexerMBean#importIndex
操作を使用して、oak-run がインデックスファイルを保存したパスから、作成したインデックスファイルを読み込みます。
このシナリオでは、AEM サーバーを停止したり、新しいインスタンスをプロビジョニングしたりする必要はありません。ただし、インデックス作成にはリポジトリ全体のトラバーサルが伴うので、インストールへの I/O 負荷が増加し、実行時のパフォーマンスに悪影響があります。
SegmentNodeStore
インストールでは、単一の oak-run コマンドを使用してインデックス再作成を行うことができます。ただし、AEM インスタンスをシャットダウンする必要があります。
次のコマンドを使用して、インデックス再作成を開始できます。
java -jar oak-run*.jar index --reindex --index-paths=/oak:index/lucene --read-write --fds-path=/path/to/datastore /path/to/segmentstore/
この方法と前述の方法の違いは、チェックポイントの作成とインデックスの読み込みが自動的におこなわれることです。欠点は、処理中に AEM を終了する必要があることです。
この使用例では、クローン作成された設定でインデックスを再作成して、実行中の AEM インスタンスへの影響を最小限に抑えることができます。
JMX 操作でチェックポイントを作成します。これを行うには、JMX コンソールに移動して、CheckpointManager
を検索します。次に、createCheckpoint(long p1) 操作をクリックして、秒単位の有効期限に大きい値(2592000 など)を使用します。
新しいマシンに crx-quickstart
フォルダーをコピーします。
oak-run の index コマンドを使用してインデックスを再作成します。
生成されたインデックスファイルを AEM サーバーにコピーします。
JMX を使用してインデックスファイルをインポートします。
このユースケースでは、別のインスタンスのデータストアにアクセスできることを前提としていますが、FileDataStore
が EBS などのクラウドベースのストレージソリューションに配置されている場合は、このデータストアにアクセスできないことがあります。この場合、FileDataStore
のクローンも作成されるシナリオは除外されます。インデックス定義でフルテキストのインデックス作成が実行されない場合は、DataStore
へのアクセスは必要ありません。
現在、インデックス定義の変更は、ACS Ensure Index パッケージ経由で送信できます。これにより、コンテンツパッケージ経由でインデックス定義の送信が可能になります。コンテンツパッケージは後で、reindex
フラグを true
に設定してインデックスを再作成する必要があります。
これは、インデックス再作成に時間がかからない小規模なインストールに適しています。ただし、非常に大きいリポジトリでは、インデックス再作成にかなりの時間がかかります。このような場合は、oak-run インデックスツールを使用できます。
oak-run では、インデックス定義を JSON 形式で提供したり、out-of-band モードでインデックスを作成したりすることができます。out-of-band モードの場合、ライブインスタンスでは変更がおこなわれません。
この使用例を検討する必要があるプロセスは次のとおりです。
開発者がローカルインスタンスでインデックス定義を更新し、インデックス定義の JSON ファイルを --index-definitions
オプションを使用して生成します。
更新された JSON がシステム管理者に提供されます。
システム管理者は Out of Band 方式に従って、別のインストールでインデックスを準備します。
これが完了すると、生成されたインデックスファイルが、実行中の AEM インストールに読み込まれます。