Search Experiencesのパーソナライズ
Search Blueprints の主な使用例の 1 つは、Liferay の 検索結果をパーソナライズすることです。 パーソナライズされた検索エクスペリエンスにより、各ユーザーは自分のコンテキストの特定の詳細に応じて結果を表示します。 現在、次のようなコンテキストの質問の答えにブループリントを反応させるための要素があります。
- ユーザーはどこにいますか?
- ユーザーにはどのような役割がありますか?
- ユーザーはどのサイトのメンバーですか?
- ユーザーはどのようなコンテンツを所有していますか?
- ユーザーはゲストですか?
- ユーザーは新規ユーザーですか?
- ユーザーはどの ユーザーセグメントに属していますか?
各ユーザーのコンテキストに合わせたブループリントがない場合、デフォルトの結果は、検索されたキーワードのテキストがインデックス付きドキュメントの トークン化された 値とどの程度一致するかによって関連性を計算するクエリに基づいてスコア付けされます。
検索結果をパーソナライズすると、ユーザーが成功に必要なものを見つけられる可能性が高まります。 これにより、ユーザーがコンテンツに興味を持ち続けるようになり、サイトが成功する可能性が高まります。 いくつかの例を挙げます。
- ユーザーの IP アドレスに近い特定の結果を優先する
- ユーザーが新規の場合、特定のコンテンツを優先する
- ユーザーが認証されていない場合に特定のコンテンツを非表示にする
パーソナライズ要素
パーソナライゼーションの取り組みに特に有効な要素がいくつかあります。
近接性の強化: は ipstack サービスを使用して、ドキュメント内の geopoint フィールドでマークされているユーザーの位置に近い検索結果を強調表示します。 以下の の例 は、サービスを設定し、Boost Proximity Element を使用する方法を示しています。
現在の言語のコンテンツをブースト: 現在のセッションの言語に一致する defaultLanguageId フィールドを持つ検索結果をブーストします。
ゲストユーザーに対してカテゴリのコンテンツを非表示にする: 検索ユーザーが認証されていない場合、 特定のカテゴリ フィールドに一致する検索結果を非表示にします。
検索を自分のコンテンツに制限: は、ドキュメントの userId フィールドが検索ユーザーと一致する場合にのみ検索結果を返します。
検索を自分のサイトに制限: は、ユーザーがメンバーである サイトに限定された検索結果のみを返します。
マイサイトのコンテンツをブースト: 検索ユーザーが結果の対象となるサイトのメンバーである場合、検索結果をブーストします。
新しいユーザー アカウントのカテゴリ内のコンテンツをブースト: 検索ユーザーのアカウントが特定の期間内に作成された場合、 特定のカテゴリ で検索結果をブーストします。
ユーザー セグメントのカテゴリ内のコンテンツをブースト: ユーザーが特定の ユーザー セグメントに属している場合、 特定のカテゴリ で検索結果をブーストします。
検索結果をパーソナライズするためのブループリントの構築
場合によっては、ユーザーの位置に基づいて結果を提示したいことがあります。 これを行うには、
- ユーザーの IP アドレスを地理位置特定するサービス https://ipstack.comを構成します。
- Liferay アセットのジオロケーションします。
- 位置情報サービスと通信する要素を含むブループリントを作成します。
Ipstackサービスの設定
ブループリントを設定する前に、 ipstack キー を取得し、Liferay で ipstack サービスを有効にする必要があります。
- https://ipstack.com にアクセスし、API キーを取得します。
- Liferay で、「システム設定」→「プラットフォーム」→「検索エクスペリエンス」→「Ipstack」に移動します。
- 有効をクリックします。
- APIキーを入力します.
- [保存]をクリックします。

位置情報アセットを設定する
ipstack サービスおよび Boost Proximity Element を操作するには、検索ドキュメントに ジオポイント フィールド が必要です。 Liferayには互換性のある位置情報フィールドがあり、既存のアセットにカスタムフィールドとして追加することができます。
- コントロールパネル → カスタムフィールドに移動します。
- ブログのエントリに新規カスタムフィールドを追加します。
- タイプ:位置情報
- フィールド名:場所
- [保存]をクリックします。
- 2 つの新しいブログ エントリを追加します (サイト メニューを開き、コンテンツ & データ → ブログに移動します)。
- 最初のブログのエントリ
- タイトル: ブログタイトル
- コンテンツ: ブログコンテンツ
- カスタムフィールドで、現在地から約100km離れた場所に位置情報ピンをドラッグします。
- ブログを公開します。
- 2つ目のブログのエントリ
- タイトル: 2番目のブログタイトル
- コンテンツ: 2番目のブログコンテンツ
- カスタムフィールドで、位置情報ピンを現在地にできるだけ近くなるようにドラッグします。
- ブログを公開します。
- 最初のブログのエントリ
ピンをより正確に配置するために、地理位置マップを拡大します。
検索ページで「 ブログ 」という単語を検索します。 タイトルとコンテンツのフィールドが短いブログエントリ (最初のエントリ、タイトルが ブログタイトル) が、検索結果ウィジェットの最初に表示されます。
位置情報認識機能を持ったブループリントを設定する
これで、ipstack サービスが設定され、ジオポイント データを使用してドキュメントが検索されるようになったので、検索ユーザーとの距離に応じて特定の結果を優先するブループリントを設定する準備が整いました。
-
グローバル メニュー → アプリケーション (エクスペリエンスの検索) から ブループリント をクリックして、ブループリント アプリケーションを開きます。
-
追加 (
) をクリックしてブループリントを追加します。
-
[新規検索ブループリント]ウィンドウで、ブループリントに[name] (必須) と[description](オプション) を指定します。
-
クエリ ビルダー を使用して、Boost Proximity 要素を追加します。
- フィールドを
expando__keyword__custom_fields__location_geolocationとして設定します。 - 減衰を0.8に設定します。
- スケールを10kmに設定します。
- ブーストの値を100に設定します。

- フィールドを
-
ブループリントを構築し、構成しながらテストします。 プレビューをクリックします。
-
あなたの地域にいるユーザーの検索エクスペリエンスをモデル化するには、歯車アイコン (
) をクリックして、パブリック IPV4 アドレスを検索コンテキストに設定します。- キー:
search.experiences.ip.address。 - 値:
[自分のパブリックIPV4アドレス]。
完了をクリックします。
- キー:
-
キーワード blog を入力し、現在地に近い地理的位置のブログ エントリが、遠いブログ エントリよりも前に返されることを確認します。
-
ブループリントの作成が完了したら、 [保存]をクリックします。
これで、 Blueprint を Liferay 検索ページに適用できます。
送信元 IP アドレスへの近さに基づいてドキュメントにスコアを付けるガウス関数を調整する必要があるかもしれません。
減衰 は、アセットとユーザーの距離がスケールに等しい場合にブースト値を減らす係数を定義します。
スケール は、ユーザーの IP アドレスの場所からの距離であり、これを超えると結果の関連性が低下し始めます。
ブースト は、定義されたスケール内で結果をブーストする数値です。
たとえば、ユーザーから 10 km 以内に位置している検索結果にブースト 100 を指定し、減衰係数を 0.5 に定義した場合、ユーザーからちょうど 10 km 離れた結果には最大ブースト値の半分が適用され、50 ブーストされます。 10km以上の距離では、ガウス関数が残りのスコアを決定することになります。
詳細については、 Elastic の Function Score Query ドキュメントを参照してください。