ドキュメントAEMAEM チュートリアルAEM Sites チュートリアル

簡易検索の実装ガイド

Last update: Thu Mar 27 2025 00:00:00 GMT+0000 (Coordinated Universal Time)
  • 適用対象:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • トピック:
  • 検索

作成対象:

  • 中級
  • 経験者
  • 開発者

簡易検索の実装は、Adobe Summit lab AEM Search Demystified の資料です。このページには、このラボの資料が含まれています。 ラボのガイド付きツアーについては、このページの「プレゼンテーション」の節でラボワークブックを参照してください。

検索アーキテクチャの概要

プレゼンテーション資料

  • ラボワークブック
  • プレゼンテーション

ブックマーク

ツール

  • インデックスマネージャー
  • クエリの説明を実行
  • CRXDE Lite > /oak:index/cqPageLucene
  • CRX パッケージマネージャー
  • QueryBuilder デバッガー
  • Oak Index Definition Generator

章

以下の章のリンクは、初期パッケージがhttp://localhost:4502 で AEM オーサーにインストールされていることを前提としています

  • 第 1 章
  • 第 2 章
  • 第 3 章
  • 第 4 章
  • 第 5 章
  • 第 6 章
  • 第 7 章
  • 第 8 章
  • 第 9 章

パッケージ

初期パッケージ

  • タグ
  • 簡易検索アプリケーションパッケージ

チャプターパッケージ

  • 第 1 章ソリューション
  • 第 2 章ソリューション
  • 第 3 章ソリューション
  • 第 4 章ソリューション
  • 第 5 章設定
  • 第 5 章ソリューション
  • 第 6 章ソリューション
  • 第 9 章ソリューション

参照資料

  • GitHub リポジトリ
  • Sling Model
  • Sling Model Exporter
  • QueryBuilder API
  • AEM Chrome プラグイン(ドキュメントページ)

修正とフォローアップ

ラボでのディスカッションからの修正と説明および出席者からのフォローアップの質問への回答。

  1. インデックスの再作成を停止するにはどうすればよいですか?

    インデックスの再作成は、AEM Web コンソール/JMX から使用可能な IndexStats MBean を介して停止できます。

    • http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats

      • abortAndPause() を実行して、インデックスの再作成を中止します。これにより、resume() が呼び出されるまでインデックスがロックされて、さらにインデックスを再作成できなくなります。
      • resume() を実行すると、インデックス作成プロセスが再開されます。
    • ドキュメント:https://jackrabbit.apache.org/oak/docs/query/indexing.html#async-index-mbean

  2. Oak インデックスは複数のテナントをどのようにサポートできますか?

    Oak はコンテンツツリー全体へのインデックス配置をサポートしており、これらのインデックスはそのサブツリー内でのみインデックス化できます。例えば、/content/site-a/oak:index/cqPageLucene を作成して、/content/site-aの下にあるコンテンツのみをインデックス化できます。

    同等の方法で、/oak:index の下にあるインデックスで includePaths および queryPaths プロパティを使用できます。次に例を示します。

    • /oak:index/siteAcqPageLucene@includePaths=/content/site-a
    • /oak:index/siteAcqPageLucene@queryPaths=/content/site-a

    この方法に関する考慮事項は次のとおりです。

    • クエリでは、インデックスのクエリパス範囲と等しいか、またはその下位であるパス制限を指定する必要があります。
    • 範囲の広いインデックス(/oak:index/cqPageLucene など)もデータのインデックスを作成するので、取り込みコストとディスク使用コストが重複します。
    • 重複した設定管理が必要になる場合があります(例:同じクエリセットを満たす必要がある場合は、複数のテナントインデックスに同じ indexRules を追加する)
    • この方法は、カスタムサイト検索の AEM パブリッシュ層で最適に機能します。AEM オーサーの場合と同様に、様々なテナントのコンテンツツリーの上位でクエリが実行されるのが一般的です(オムニサーチ経由など)。インデックスの定義が異なると、パス制限のみに基づく動作が異なる場合があります。
  3. 使用可能なすべてのアナライザーのリストはどこにありますか?

    Oak は、AEM で使用するための lucene-provides アナライザー設定要素のセットを公開します。

    • Apache Oak アナライザードキュメント

      • Tokenizers
      • フィルター
      • CharFilters
  4. 同じクエリでページとアセットを検索するにはどうすればよいですか?

    指定したクエリと同じクエリで複数のノードタイプをクエリする機能が AEM 6.3 で新しく導入されました。次の QueryBuilder クエリを例に考えてみます。各「サブクエリ」は独自のインデックスに解決できるので、この例では、cq:Page サブクエリは /oak:index/cqPageLucene に解決され、dam:Asset サブクエリは /oak:index/damAssetLucene に解決されます。

    group.p.or=true
    group.1_group.type=cq:Page
    # add all page restrictions to this group
    group.2_group.type=dam:Asset
    # add all asset restrictions to this group
    

    結果として、次のクエリとクエリプランが得られます。

    QUERY:(//element(*, cq:Page) | //element(*, dam:Asset))
    
    PLAN: [cq:Page] as [a] /* lucene:cqPageLucene(/oak:index/cqPageLucene) *:* */ union [dam:Asset] as [a] /* lucene:damAssetLucene(/oak:index/damAssetLucene) *:* */
    

    QueryBuilder デバッガーと AEM Chrome プラグインを使用して、クエリと結果を調べます。

  5. 同じクエリで複数のパスを検索するにはどうすればよいですか?

    指定したクエリと同じクエリで複数のパスにわたってクエリする機能が AEM 6.3 で新しく導入されました。次の QueryBuilder クエリを例に考えてみます。各「サブクエリ」が独自のインデックスに解決される可能性があります。

    group.p.or=true
    group.1_group.type=cq:Page
    group.1_group.path=/content/docs/en/6-2
    # add all page restrictions to this group
    group.2_group.type=cq:Page
    group.2_group.path=/content/docs/en/6-3
    # add all asset restrictions to this group
    

    結果として、次のクエリとクエリプランが得られます。

    QUERY: (/jcr:root/content/docs/en/_x0036_-2//element(*, cq:Page) | /jcr:root/content/docs/en/_x0036_-3//element(*, cq:Page))
    
    PLAN: [cq:Page] as [a] /* traverse "/content/docs/en/6-2//*" where isdescendantnode([a], [/content/docs/en/6-2]) */ union [cq:Page] as [a] /* traverse "/content/docs/en/6-3//*" where isdescendantnode([a], [/content/docs/en/6-3]) */
    

    QueryBuilder デバッガーと AEM Chrome プラグインを使用して、クエリと結果を調べます。

recommendation-more-help
bb44cebf-d964-4e3c-b64e-ce882243fe4d