簡易検索の実装ガイド simple-search-implementation-guide
簡易検索の実装は、Adobe Summit lab AEM Search Demystified の資料です。このページには、このラボの資料が含まれています。 ラボのガイド付きツアーについては、このページの「プレゼンテーション」の節でラボワークブックを参照してください。
プレゼンテーション資料 bookmarks
ブックマーク bookmarks-1
ツール tools
- インデックスマネージャー
- クエリの説明を実行
- CRXDE Lite > /oak:index/cqPageLucene
- CRX パッケージマネージャー
- QueryBuilder デバッガー
- Oak Index Definition Generator
章 chapters
以下の章のリンクは、初期パッケージがhttp://localhost:4502
で AEM オーサーにインストールされていることを前提としています
パッケージ packages
初期パッケージ initial-packages
チャプターパッケージ chapter-packages
参照資料 reference-materials
修正とフォローアップ corrections-and-follow-up
ラボでのディスカッションからの修正と説明および出席者からのフォローアップの質問への回答。
-
インデックスの再作成を停止するにはどうすればよいですか?
インデックスの再作成は、AEM Web コンソール/JMX から使用可能な IndexStats MBean を介して停止できます。
-
abortAndPause()
を実行して、インデックスの再作成を中止します。これにより、resume()
が呼び出されるまでインデックスがロックされて、さらにインデックスを再作成できなくなります。resume()
を実行すると、インデックス作成プロセスが再開されます。
-
ドキュメント:https://jackrabbit.apache.org/oak/docs/query/indexing.html#async-index-mbean
-
-
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 オーサーの場合と同様に、様々なテナントのコンテンツツリーの上位でクエリが実行されるのが一般的です(オムニサーチ経由など)。インデックスの定義が異なると、パス制限のみに基づく動作が異なる場合があります。
-
使用可能なすべてのアナライザーのリストはどこにありますか?
Oak は、AEM で使用するための lucene-provides アナライザー設定要素のセットを公開します。
-
同じクエリでページとアセットを検索するにはどうすればよいですか?
指定したクエリと同じクエリで複数のノードタイプをクエリする機能が AEM 6.3 で新しく導入されました。次の QueryBuilder クエリを例に考えてみます。各「サブクエリ」は独自のインデックスに解決できるので、この例では、
cq:Page
サブクエリは/oak:index/cqPageLucene
に解決され、dam:Asset
サブクエリは/oak:index/damAssetLucene
に解決されます。code language-plain 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
結果として、次のクエリとクエリプランが得られます。
code language-plain 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 プラグインを使用して、クエリと結果を調べます。
-
同じクエリで複数のパスを検索するにはどうすればよいですか?
指定したクエリと同じクエリで複数のパスにわたってクエリする機能が AEM 6.3 で新しく導入されました。次の QueryBuilder クエリを例に考えてみます。各「サブクエリ」が独自のインデックスに解決される可能性があります。
code language-plain 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
結果として、次のクエリとクエリプランが得られます。
code language-plain 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 プラグインを使用して、クエリと結果を調べます。