問題
コンテンツフィールドの接頭辞による検索時の動作が変更されました。 タイトルフィールドで検索すると、引き続き動作します。
例えば、「legal」という単語が入ったコンテンツフィールドがあり、「leg」という接頭辞で検索した場合、以下のように動作が変化します。
- Elasticsearch 6 の場合: コンテンツが見つかりました。
- Elasticsearch 7 の場合: コンテンツが見つかりません。
タイトル欄の動作に変更はなく、タイトルに「legal」の単語があり、「leg」の接頭辞で検索した場合でも、コンテンツは検索可能です。
背景
技術的なレベルでは、Elasticsearch 7のクエリで変更を検出しました。以前は、ポータルはコンテンツフィールドで match_phrase_prefix
節を使って検索していましたが、現在はデフォルトで match_phrase
節になっています。 この変更は、Elasticsearch 6 と 7 の違いに起因するものであり、導入が必要でした。
Environment
-
DXP 7.3-7.4
-
DXP 7.2 と Elasticsearch 7 の組み合わせ
-
DXP 7.1 と Elasticsearch 7 の組み合わせ
解決策
この動作の変化は予想されることであり、ここにその全容を説明します。
1. クエリーの種類
Liferayには2種類のクエリタイプがあります。
-
title (TitleFieldQueryBuilder) => は
match_phrase_prefix
節を使用。 -
description (DescriptionFieldQueryBuilder) => は
match_phrase
節を使用する。
2種類のクエリーを用意したのは、両方を差別化したいからです。
- "title" タイプは、ユーザーがアセットのタイトルを検索することが多いと予想され、またタイトルが内容を示すことが多いため、より強く、詳細に検索されることを意図しています。
- "description" 型は、内容が大きくなる可能性があり、より多くの関連情報を含むと予想されるため、あまり熱心に検索されないと予想されます。
各フィールドで使用するクエリタイプは、以下のLiferayのコードで決定します。
このコードでは、 FieldQueryBuilderFactoryImpl コンポーネントのプロパティ でフィールドが設定されており、設定されていないすべてのフィールドに対してデフォルトのクエリータイプが存在します。
2. Elasticsearch 6 と 7 のデフォルトのクエリタイプの相違点
FieldQueryBuilderFactoryImplコンポーネントで設定されていないすべてのフィールドには、デフォルトのクエリタイプが使用されます。
デフォルトのクエリタイプは、前述のパッチレベルおよびバージョン間で変更されます。
- Elasticsearch 6 コネクタは、フィールドが設定されていなかった場合のフォールバッククエリータイプとして、 TitleFieldQueryBuilder を使用します。
- Elasticsearch 7 コネクタの開発中に、正しいフォールバッククエリタイプは DescriptionFieldQueryBuilderであるべきだということが決まりました。
これは、フォールバッククエリが DescriptionFieldQueryBuilder に変更され、コンテンツフィールドが match_phraseを使用しているため、このバージョンの新しいデフォルト句であることを説明しています。
3. 動作を変更するためのサポートされていないワークアラウンド
警告 この回避策はサポートされていません。
FieldQueryBuilderFactoryImpl の動作を変更することができます match_phrase_prefix
を他のフィールドに設定するには、カスタム値でそれを構成する この FieldQueryBuilderFactoryImpl OSGIコンポーネントのプロパティを設定します。
OSGiコンポーネントのカスタムプロパティを設定するには、このコミュニティのブログポストの指示に従うことができます。
FieldQueryBuilderFactoryImplにこの変更を適用する場合、 com.liferay.portal.search.internal.analysis.FieldQueryBuilderFactoryImpl.config
を [LIFERAY_HOME]/osgi/configs
フォルダに作成し、 description.fields
y title.fields
を必要な値で作成しなければならな いでしょう。
重要: この設定変更は、サポートサービスの範囲外となるパーソナライゼーションとみなされます。