Adobeは、「汎用 Lucene」インデックス (/oak:index/lucene-*
) をAdobe Experience Manager as a Cloud Serviceから。 このインデックスはAEM 6.5 以降で非推奨となりました。このドキュメントでは、この決定の影響と、AEMインスタンスが影響を受けるかどうかを調べる方法の詳細を説明します。 また、クエリを変更する方法も含まれているので、汎用の Lucene インデックスなしでもクエリが引き続き機能します。
AEMでは、フルテキストクエリは次の関数を使用します。
jcr:contains()
JCR XPATH 内CONTAINS
JCR-SQL2 のこのようなクエリでは、インデックスを使用しないと結果を返すことはできません。 パスまたはプロパティの制限のみを含むクエリとは異なり、インデックスが見つからない(したがってトラバーサルが実行される)フルテキスト制限を含むクエリは、常にゼロの結果を返します。
汎用の Lucene インデックス (/oak:index/lucene-*
) は、ほとんどのリポジトリ階層に対してフルテキスト検索を提供するためにAEM 6.0/Oak 1.0 以降に存在しています(ただし、次のようなパスもあります)。 /jcr:system
および /var
は常にこのから除外されています。 ただし、このインデックスは、より具体的なノードタイプのインデックスに大きく置き換えられています ( 例: damAssetLucene-*
の dam:Asset
ノードタイプ ) で、フルテキスト検索とプロパティ検索の両方をサポートします。
AEM 6.5 では、汎用 Lucene インデックスは非推奨とマークされ、将来のバージョンで削除されることを示していました。 それ以降、次のログスニペットで示すようにインデックスが使用された場合に、WARN が記録されます。
org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex This index is deprecated: /oak:index/lucene-2; it is used for query Filter(query=select [jcr:path], [jcr:score], * from [nt:base] as a where contains(*, 'search term') and isdescendantnode(a, '/content/mysite') /* xpath: /jcr:root/content/mysite//*[jcr:contains(.,"search term")] */ fullText="search" "term", path=/content/mysite//*). Please change the query or the index definitions.
最近のAEMバージョンでは、汎用 Lucene インデックスがごく少数の機能をサポートするために使用されています。 他のインデックスを使用するように修正されているか、このインデックスへの依存を削除するために変更されています。
例えば、次の例のような参照参照クエリでは、 /oak:index/pathreference
(インデックスのみ) String
JCR パスを検索する正規表現に一致するプロパティ値。
//*[jcr:contains(., '"/content/dam/mysite"')]
大規模な顧客データボリュームをサポートするために、Adobeは、新しいAEMas a Cloud Service環境で汎用の Lucene インデックスを作成しなくなります。 さらに、Adobeは既存のリポジトリからインデックスを削除し始めます。 タイムラインを見る 詳しくは、このドキュメントの末尾を参照してください。
Adobeは、 costPerEntry
および costPerExecution
他のインデックスを確実に作成するためのプロパティ /oak:index/pathreference
は、可能な限り好みに応じて使用します。
このインデックスに依存するクエリを使用する顧客アプリケーションは、他の既存のインデックスを利用するために即座に更新する必要があります。必要に応じてカスタマイズできます。 または、新しいカスタムインデックスを顧客アプリケーションに追加できます。 AEM as a Cloud Serviceでのインデックス管理の完全な手順については、 インデックス作成ドキュメント。
汎用 Lucene インデックスは、現在、他の全文インデックスがクエリに対応できない場合に、フォールバックとして使用されます。 この非推奨のインデックスを使用すると、次のようなメッセージが WARN レベルで記録されます。
org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex This index is deprecated: /oak:index/lucene-2; it is used for query Filter(query=select [jcr:path], [jcr:score], * from [nt:base] as a where contains(*, 'test') /* xpath: //*[jcr:contains(.,"test")] */ fullText="test", path=*). Please change the query or the index definitions.
状況によっては、Oak が別のフルテキストインデックス ( /oak:index/pathreference
) を使用してフルテキストクエリをサポートしますが、クエリ文字列がインデックス定義の正規表現と一致しない場合、メッセージは WARN レベルで記録され、クエリは結果を返さない可能性が高くなります。
org.apache.jackrabbit.oak.query.QueryImpl Potentially improper use of index /oak:index/pathReference with queryFilterRegex (["']|^)/ to search for value "test"
汎用 Lucene インデックスが削除されると、次に示すメッセージが、フルテキストクエリで適切なインデックス定義を見つけられない場合に、WARN レベルで記録されます。
org.apache.jackrabbit.oak.query.QueryImpl Fulltext query without index for filter Filter(query=select [jcr:path], [jcr:score], * from [nt:base] as a where contains(*, 'test') /* xpath: //*[jcr:contains(.,"test")] */ fullText="test", path=*); no results will be returned
必要な顧客アクション
前述の警告メッセージのいずれかがログに記録された場合は、異なるフルテキストインデックスを使用するためにクエリを再作業するか、クエリをサポートする新しいインデックスを指定する必要が生じる場合があります。
次の節では、表示される依存関係のタイプと対処方法の詳細について説明します。
アプリケーションやAEMのインストールが、オーサーインスタンスとパブリッシュインスタンスの両方で汎用の Lucene インデックスに依存する場合がある領域は多数あります。
パブリッシュインスタンスで汎用 Lucene インデックスを使用するクエリの最も一般的なソースは、カスタムアプリケーションクエリです。
最も簡単な場合は、これは、次のように指定したノードタイプの指定のないクエリです。 nt:base
または nt:base
次のように、明示的に指定されます。
/jcr:root/content/mysite//*[jcr:contains(., 'search term')]
/jcr:root/content/mysite//element(*, nt:base)[jcr:contains(., 'search term')]
必要な顧客アクション
次の節で説明する適切なノードタイプを使用するように、前述のクエリを変更する必要があります。
例えば、クエリを変更して、ページに一致する結果や、 cq:Page node
. クエリは次のようになります。
/jcr:root/content/mysite//element(*, cq:Page)[jcr:contains(., 'search term')]
他のフルテキストインデックスでは処理できないフルテキスト制限が含まれている、ノードタイプを指定するクエリが含まれる場合もあります。例えば、次のような場合です。
/jcr:root/content/dam//element(*, dam:Asset)[jcr:contains(jcr:content/metadata/@cq:tags, 'NewsTopics:cateogries/domestic'))]
この場合、クエリは dam:Asset
ノードタイプですが、相対 jcr:content/metadata/@cq:tags
プロパティ。
このプロパティは、 damAssetLucene
index:最も一般的に使用されるフルテキストインデックスで、 dam:Asset
ノードタイプ。 したがって、このインデックスはこのクエリには使用できません。
したがって、クエリは汎用のフルテキストインデックスにフォールバックし、含まれるすべてのプロパティが、ワイルドカードの一致によって分析済みとしてマークされます。 /oak:index/lucene-2/indexRules/nt:base/properties/prop
.
必要な顧客アクション
を jcr:content/metadata/@cq:tags
カスタムバージョンの damAssetLucene
インデックスを作成すると、このインデックスでこのクエリが処理され、WARN は記録されません。
顧客アプリケーションサーブレット、OSGi コンポーネント、レンダリングスクリプトのクエリに加えて、汎用の Lucene インデックスには、作成者固有の用途が多数存在する場合があります。
従来、汎用 Lucene インデックスは、別のコンテンツパスへの参照を含むコンテンツの参照検索または検索をサポートするために使用されていました。 このようなクエリは、新しい /oak:index/pathreference
索引
AEMには、Sling リソースタイプを持つカスタムダイアログコンポーネントが含まれます granite/ui/components/coral/foundation/form/pathfield
:別のAEMパスを選択するためのブラウザー/ピッカーを提供します。 デフォルトのパスフィールドピッカー。カスタムパスがない場合に使用されます。 pickerSrc
プロパティはコンテンツ構造で定義され、ポップアップダイアログボックスで検索バーをレンダリングします。
検索対象のノードタイプは、 nodeTypes
プロパティ。
現時点で、 nodeTypes
プロパティが存在する場合、基になる検索クエリは nt:base
ノードタイプの場合は、一般的な Lucene インデックスを使用し、通常は次のような WARN メッセージをログに記録します。
20.01.2022 18:56:06.412 *WARN* [127.0.0.1 [1642704966377] POST /mnt/overlay/granite/ui/content/coral/foundation/form/pathfield/picker.result.single.html HTTP/1.1] org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex This index is deprecated: /oak:index/lucene-2; it is used for query Filter(query=select [jcr:path], [jcr:score], * from [nt:base] as a where contains(*, 'test') and isdescendantnode(a, '/content') /* xpath: /jcr:root/content//element(*, nt:base)[(jcr:contains(., 'test'))] order by @jcr:score descending */ fullText="test", path=/content//*). Please change the query or the index definitions.
汎用の Lucene インデックスを削除する前に、 pathfield
コンポーネントが更新され、デフォルトのピッカーを使用してコンポーネントの検索ボックスが非表示になります。このピッカーは、 nodeTypes
プロパティ。
検索を使用したパスフィールドピッカー | 検索を使用しないパスフィールドピッカー |
---|---|
![]() |
![]() |
必要な顧客アクション
パスフィールドピッカー内に検索機能を保持したい場合は、 nodeTypes
プロパティは、クエリ対象のノードタイプをリストして提供する必要があります。 これらは、 String
プロパティ。 検索が必要ない場合は、お客様からのアクションは不要です。
コンテンツフラグメントモデルエディターは、Sling リソースタイプを持つ専用のパスフィールドを使用します dam/cfm/models/editor/components/contentreference
.
cq:Page
および dam:Asset
顧客の操作を必要としないノードタイプnodeTypes
プロパティを追加して、これらのデフォルトのノードタイプを上書きできます。Adobeは、汎用の Lucene インデックスを削除する 2 段階アプローチを取ります。
/oak:index/lucene-*
新しいAEMas a Cloud Service環境の場合/oak:index/lucene-*
既存のAEMas a Cloud Service環境からのインデックスAdobeは上記のログメッセージを監視し、汎用の Lucene インデックスに依存し続けるお客様への連絡を試みます。
短期的な緩和として、Adobeは、カスタムインデックス定義を直接お客様のシステムに追加し、必要に応じて汎用 Lucene インデックスを削除した結果として機能やパフォーマンスの問題を回避します。
このような場合、お客様には更新されたインデックス定義が提供され、Cloud Manager を介してアプリケーションの将来のリリースにこれを含めるようお勧めします。