legacy-knowledge-base
公開されました Jul. 2, 2025

Elasticsearch 7使用時の部分一致検索の動作変更について

written-by

Jorge Diaz

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

コンテンツフィールドの接頭辞による検索時の動作が変更されました。 タイトルフィールドで検索すると、引き続き動作します。

例えば、「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コンポーネントで設定されていないすべてのフィールドには、デフォルトのクエリタイプが使用されます。

以下のLiferayのコードで取得します: https://github.com/liferay/liferay-portal/blob/ded0e9390637985231e962e4ad4cfa4639eabb26/modules/apps/portal-search/portal-search/src/main/java/com/liferay/portal/search/internal/query/field/FieldQueryFactoryImpl.java#L71

デフォルトのクエリタイプは、前述のパッチレベルおよびバージョン間で変更されます。

  • 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 を必要な値で作成しなければならな いでしょう。

重要: この設定変更は、サポートサービスの範囲外となるパーソナライゼーションとみなされます。

did-this-article-resolve-your-issue

legacy-knowledge-base