セマンティック検索
7.4 U70+ ベータ機能
セマンティック 検索は、検索されたフレーズの背後にある意図を評価します。 一方、 キーワード 検索では、検索したフレーズがインデックス付けされたテキスト フィールドに一致しますが、意味に基づいた一致を生成することはできません。
| 検索フレーズ | インデックスされたコンテンツ | マッチタイプ |
|---|---|---|
| テクノロジーの最新情報 | Liferay、7.3の検索エクスペリエンスをリリース | セマンティック ✔ キーワード ✘ |
| 新作 | Liferay Search Experiencesに新機能がリリースされました | セマンティック✔ キーワード✔ |
Liferay(Elasticsearch搭載)のような洗練されたキーワード検索でさえ、次のような独創的な技術を採用しているにもかかわらず、ユーザーの意図をインデックスされた文書と一致させることはできません。
- キーワードとドキュメント フィールドをトークン化する分析。
- あいまいさとゆるみにより、不正確なマッチングが可能になります。
- 語幹解析により単語を語根に分解し、同義語のマッチングを可能にします。
- 重要でない単語を無視するには、ストップワードを使用します。
トークン化されたキーワードとドキュメント フィールドによる検索は、多くの検索ニーズを満たすのに十分です。 検索エクスペリエンスをさらに強化する必要がある場合、セマンティック検索は、キーワード検索で達成できることとユーザーが検索に本当に求めていることとの間のギャップを大幅に埋めます。つまり、検索語だけでなくその意図も処理します。

セマンティック検索により、追加のコンテンツ処理パイプラインが可能。 有効にすると、プラットフォームはテキスト埋め込みと呼ばれる入力テキストのベクトル表現を生成し、Elasticsearch のインデックス ドキュメントに保存します。 検索時には、ユーザーが入力した検索キーワードに対して同様のベクトル化および埋め込み処理が行われ、ユーザーにとってより意味のある関連性の高い検索結果を提供する類似検索が可能になります。 すべてのコンテンツ タイプがテキストの埋め込みをサポートしているわけではありません。
| サポートされているコンテンツタイプ | デフォルト設定で有効? |
|---|---|
| ブログのエントリ | ✔ |
| ドキュメント | ✔ |
| ナレッジベースの記事 | ✔ |
| 掲示板のメッセージ | ✘ |
| 基本的なWebコンテンツ記事 | ✔ |
| Wikiページ | ✔ |
| DXP 2025.Q4+ オブジェクトエントリ (カスタムおよび変更可能なシステムオブジェクト) | ✘ |
効果的なセマンティック検索ソリューションには、データ ドメイン向けにトレーニングされたモデルが必要です。 最も簡単なアプローチは、適切な事前トレーニング済みモデルを見つけて、それをデータに合わせて微調整することです。 ここで紹介した例は、本番環境ですぐに使用できるセマンティック検索ソリューションではありません。
セマンティック検索の有効化
Liferayでセマンティック検索を有効にするには、
- グローバル メニュー (
) を開き、 コントロール パネル → インスタンス設定をクリックします。 - プラットフォーム → 機能フラグ セクションを開きます。
- ベータ エントリで、セマンティック検索を有効にします。

ポータルプロパティを使用してセマンティック検索を有効にするには、これを portal-ext.propertiesに追加します。
feature.flag.LPS-122920=true
環境変数を使用してセマンティック検索を有効にするには、これを構成に追加します。
LIFERAY_FEATURE_PERIOD_FLAG_PERIOD__UPPERCASEL__UPPERCASEP__UPPERCASES__MINUS__NUMBER1__NUMBER2__NUMBER2__NUMBER9__NUMBER2__NUMBER0_=true
セマンティック検索を設定するには、
- モデルを選択するか、独自のモデルを作成します。
- テキスト埋め込みプロバイダーを有効にし、Liferay で設定します。
- テキスト埋め込みをインデックスします。
- ベクトル化された検索用語とドキュメント間の類似性検索を実行するための検索ブループリントを作成します。
モデルの選択
適切にトレーニングされたモデル が最も重要です。インデックス内のデータは、選択したモデルに適切である必要があります。 事前トレーニング済みのモデルを使用するのは便利ですが、本番環境で使用する前にデータの微調整が必要になる場合があります。 堅牢なテストを通じてのみ、選択したモデルが適切であることを知ることができます。
たとえば、ユーザーが「 スケートはどのように動きますか?」と検索した場合、海洋生物学に基づいてトレーニングされたモデルは、レクリエーションに基づいてトレーニングされたモデルとは異なる結果をもたらします。
Hugging Face モデル ハブ は、事前トレーニング済みのドメイン固有のモデルの大規模なコレクションを提供します。
OpenAI は、いくつかの事前トレーニング済みの埋め込みモデルを提供しています。
テキスト埋め込みのインデックス作成
テキスト埋め込みは、
- セマンティック検索を初めて有効にします。
- セマンティック検索構成で、テキスト埋め込みプロバイダー、モデル、ベクター次元、またはテキスト切り捨て戦略を変更します。
テキスト埋め込みをインデックスするには、「インデックス アクション」画面を使用して、セマンティック検索システムまたはインスタンス設定のアセット エントリ クラス名設定で有効にしているモデル タイプに対してのみ、 「再インデックス 」ボタンをクリックします。
セマンティック検索の設定
テキスト埋め込みプロバイダーの設定に加えて、セマンティック検索には追加の構成オプションが利用できます。 コントロール パネル → インスタンス設定 → セマンティック検索 (検索カテゴリ内) にアクセスします。
テキスト埋め込みプロバイダの設定については、 セマンティック検索の有効化で説明されています。
インデックス設定には次のものが含まれます。
最大文字数: テキスト埋め込みプロバイダーに送信する最大文字数を設定します。 デフォルトでは、最大 500 文字がベクター表現への変換のために送信されます。 理想的な値は、使用している テキスト埋め込みプロバイダー とモデルによって異なります。 たとえば、 OpenAI モデル は 8192 個のトークンをサポートしていますが、 Hugging Face モデル ハブ の人気のある BERT モデルの多くは 512 個のトークンを処理できます。 特定のモデルのトークン制限に設定する文字数を検討する場合、2 つの一般的な経験則が見積りに役立ちます。トークンは単語の約 3/4 であり、トークンには約 4 文字が含まれます。 ただし、これはあくまでも概算です。 テストを通じて正しい値を決定する必要があります。
テキスト切り捨て戦略: 変換前のサンプルをテキストの先頭 (デフォルト)、中間、または末尾から抽出するかどうかを選択します。 この設定は、ソース テキストが最大文字数よりも長い場合にのみ適用されます。 戦略と最大文字数に応じて、タイトル/件名とコンテンツ/本文の一部を使用してテキスト埋め込みを生成できます。 切り捨て戦略を設定するときは、オブジェクト エントリの固有のドキュメント構造を考慮してください。 オブジェクトのメインコンテンツを保持する nestedFieldArray の大部分を含めるには、切り捨て戦略として Middle を選択することを検討してください。 ドキュメントの構造を検査するには、Search Insights ウィジェットの応答文字列を使用できます。 スコアの説明を無効にして、応答内のドキュメント構造をよりよく確認します。 詳細については、 インデックス付きフィールドの調査 を参照してください。
タイプ: 変換するコンテンツ タイプを選択します。 デフォルトでは、ブログ エントリ、ドキュメント、ナレッジ ベース記事、Web コンテンツ記事、Wiki ページ、およびオブジェクト エントリ (カスタムおよび変更可能なシステム オブジェクト) が含まれます。 メッセージ ボード メッセージ エンティティは必要に応じて構成できます。
- 現在、基本的な Web コンテンツの記事のみがサポートされています。
- すぐに使用できる基本ドキュメント タイプとカスタム ドキュメント タイプがサポートされています。
言語: 変換する言語とローカリゼーションを選択します。 デフォルトでは、リストされているすべての言語が選択されています。 Ctrl + クリックを使用して、リストから複数の言語を選択します。
言語を有効にしても、その言語の文の埋め込みが作成されるとは限りません。 その言語がサイトで利用可能である必要があります。 言語がシステム/インスタンス設定で有効になっていて、サイトで使用できるが、特定のコンテンツの翻訳がない場合は、デフォルトの翻訳を使用してテキスト埋め込みが作成されます。
テキスト埋め込みキャッシュタイムアウト: 変換された検索キーワードのキャッシュタイムアウトをミリ秒単位で設定します。 キャッシュがタイムアウト内であれば、Liferay はテキスト埋め込みプロバイダーにキーワードのテキスト埋め込みを要求しません。 デフォルトでは、タイムアウトは 604800 ミリ秒 (約 10 分) です。
Liferayにおけるセマンティック検索の理解
Liferayのセマンティック検索は
-
完全なセマンティック検索では、検索ブループリントで通常のインデクサーが無効になっており、関連するコンテンツの検索にはテキスト埋め込みのみが使用されます。
-
ハイブリッド セマンティック検索では、最初にキーワード検索が実行され、テキスト埋め込みを使用して結果が再スコアリングされます。
セマンティック検索とその複雑さをしっかりと理解することは、この簡単な説明の範囲を超えています。 ここでは、セマンティック検索の基本的な概念をいくつか説明しながら、Liferay ハイブリッド セマンティック検索の実装がどのように機能するかについて説明します。
セマンティック検索は、インデックス時間と検索時間の両方で Liferay 検索に影響を与え、コンテンツ処理のレベルをさらに高めます。
インデックス作成段階でのセマンティック検索
- まず、通常のコンテンツ処理が行われます。
- [Liferay] Liferay のコンテンツは検索エンジンに送信され、そこでデータの種類に応じて処理されます。テキストは適切に分析され、インデックスに保存されます。
- [Liferay] 追加のセマンティック検索処理が行われます:
- システム/インスタンス設定の構成に従って、テキスト スニペットは Liferay によってテキスト埋め込みプロバイダーに送信されます。
- 最大文字数とテキスト切り捨て戦略によって、テキスト埋め込みプロバイダーに送信されるスニペットが決まります。
- Liferay は、ブログ エントリ、ナレッジ ベース記事、Wiki ページ、基本 Web コンテンツ記事のタイトルとコンテンツを選択します。 メッセージボード メッセージの場合、件名と本文のフィールドが処理されます。
- オブジェクトエントリの場合、Liferay は検索可能なフィールドから結合された生のテキストを選択して処理します。
- [テキスト埋め込みプロバイダー] 最初に、設定されたモデルに従ってスニペットが処理され、パラメータに従ってスニペットがトークン化されます。 各埋め込みプロバイダーとモデルは、処理できるトークンの最大数を指定します。 これは、システム/インスタンス設定のセマンティック検索 → 最大文字数設定で設定された文字数の影響を受けます。
- [テキスト埋め込みプロバイダー] トランスフォーマーが使用するモデルに基づいて、テキスト埋め込みと呼ばれるソースのベクトル表現が作成されます。
- [Liferay] テキスト埋め込みプロセスの結果は、各ドキュメント1の Liferay Company Index に dense_vector フィールドとして保存されます。
- システム/インスタンス設定の構成に従って、テキスト スニペットがテキスト埋め込みプロバイダーに送信され、テキストの埋め込みが行われ、トランスフォーマーによって使用されるモデルに基づいてベクトル表現が作成されます。 テキスト埋め込みプロセスの結果は、各ドキュメント1の Liferay Company Index に dense_vector フィールドとして保存されます。
- システム/インスタンス設定の構成に従って、テキスト スニペットは Liferay によってテキスト埋め込みプロバイダーに送信されます。
検索フェーズにおけるセマンティック検索
- 通常のキーワードマッチングが行われます:
- 検索バー ウィジェットに入力された検索フレーズは、Liferay の検索フレームワークによって受信され、分析と追加処理のために検索エンジンに送信され、検索エンジン内の既存のインデックス ドキュメントと照合されます。これらのドキュメントは関連性に基づいてスコア付けされ、追加処理 (強調表示、要約、権限の追加フィルタリングの実行など) のために Liferay に返されます。
- 追加のセマンティック検索処理が行われます。
-
ドキュメント内のフィールドを検査するには、 「結果をドキュメント形式で表示」 設定、または 「ブループリントの検索プレビュー」 機能を使用します。
↩ ↩