Search Experiencesのパーソナライズ
Search ExperiencesとSearch Blueprintsの主な使用例の1つは、Liferayの検索結果 をパーソナライズすることです。 パーソナライズされた検索エクスペリエンスでは、各ユーザーは自分のコンテキストの特定の詳細に応じて結果を見る。 現在、次のようなコンテキストの質問の答えにブループリントを反応させるための要素があります。
- ユーザーはどこにいるのか?
- ユーザーにはどのような役割がありますか?
- そのユーザーが所属しているサイトは?
- ユーザーはどのようなコンテンツを所有しているのか?
- ユーザーはゲストですか?
- そのユーザーは新規ユーザーですか?
- どの ユーザーセグメントに属しているか?
各ユーザーのコンテキストに合わせたブループリントがなければ、デフォルトの結果は、検索されたキーワードのテキストが、インデックス化されたドキュメントの トークン化された 値とどれだけ一致するかによって関連性を計算するクエリに基づいてスコア付けされる。
検索結果をパーソナライズすることで、ユーザーが成功に必要なものを見つけられる可能性が高まる。 これにより、ユーザーをコンテンツに引き付け続けることができ、サイトが成功する可能性が高まります。 いくつかの例を挙げます。
- ユーザーのIPアドレスに近い場合、特定の結果を優先する。
- ユーザーが初めての場合、特定のコンテンツを優先する
- ユーザーが認証されていない場合、特定のコンテンツを非表示にする
パーソナライズ要素
パーソナライゼーションの取り組みに特に有効な要素がいくつかあります。
Boost Proximity: は、 ipstack サービスを使って、ドキュメント内の geopoint フィールドによってマークされたユーザーの位置により近い検索結果をブーストする。 下記の例 では、サービスの設定方法とBoost Proximity要素の使用方法を紹介しています。
現在の言語用にコンテンツをブーストする: 現在のセッションの言語にマッチする defaultLanguageId
フィールドを持つ検索結果をブーストする。
Hide Contents in a Category for Guest Users: 検索ユーザーが認証されていない場合、 特定のカテゴリー フィールドにマッチする検索結果を非表示にします。
Limit Search to My Contents: 文書の userId
フィールドが検索ユーザーと一致する場合のみ、検索結果を返します。
Limit Search to My Sites:ユーザーがメンバーであるサイトにスコープされた検索結果のみを返します。
Boost Contents on My Sites: は、検索ユーザーがスコープされているサイトのメンバーである場合に、検索結果をブーストします。
ブースト・コンテンツ・オン・マイ・サイト: 検索ユーザーが、検索結果がスコープされているサイトのメンバーである場合、検索結果がブーストされます。
新規ユーザーアカウントのカテゴリ内コンテンツをブースト: 検索ユーザーのアカウントが特定の時間範囲に作成された場合、 特定のカテゴリ で検索結果をブーストします。
Boost Contents in a Category for a User Segment: ユーザーが特定のユーザーセグメント に属している場合、特定のカテゴリ で検索結果をブーストします。
検索結果をパーソナライズするためのブループリントの構築
ユーザーの位置情報に基づいて結果を表示したい場合があります。 そのためには
- ユーザーのIPアドレスをジオロケーションするサービスを設定します。 https://ipstack.com.
- Liferay アセットのジオロケーションします。
- 位置情報サービスと通信する要素を含むブループリントを作成します。
Ipstackサービスの設定
ブループリントを設定する前に、 ipstack key を取得し、Liferay で ipstack サービスを有効にする必要があります。
- https://ipstack.com にアクセスし、APIキーを取得します。
- Liferayの[システム設定] → [プラットフォーム] → [Search Experiences] → [Ipstack]に進みます。
- [有効] をクリックします。
- APIキーを入力します.
- [保存] をクリックします。
位置情報アセットを設定する
ipstackサービスとBoost Proximity Elementで動作するためには、検索ドキュメントに geopointフィールド 。 Liferayには互換性のある位置情報フィールドがあり、既存のアセットにカスタムフィールドとして追加することができます。
- [コントロールパネル] → [カスタムフィールド] に移動します。
- ブログのエントリに新規カスタムフィールドを追加します。
- タイプ:位置情報
- フィールド名:場所
- [保存] をクリックします。
- 2つの新規ブログを追加します(サイトメニューを開き、[コンテンツ] & [データ] → [ブログ]に移動します)。
- 最初のブログのエントリ
- タイトル: ブログタイトル
- コンテンツ: ブログの内容
- カスタムフィールドで、現在地から約100km離れた場所に位置情報ピンをドラッグします。
- ブログを公開します。
- 2つ目のブログのエントリ
- タイトル: 2つ目のブログタイトル
- コンテンツ: 2つ目のブログの内容
- カスタムフィールドで、位置情報ピンを現在地にできるだけ近くなるようにドラッグします。
- ブログを公開します。
- 最初のブログのエントリ
ピンをより正確に配置するために、ジオロケーションマップをズームします。
検索ページで blog 。 タイトルとコンテンツ・フィールドが短いブログ・エントリー(最初のもの、タイトルは ブログタイトル)は、検索結果ウィジェットに最初に表示される。
位置情報認識機能を持ったブループリントを設定する
これで ipstack サービスが設定され、ジオポイントデータを含む検索ドキュメントが作成されたので、検索ユーザーからの近さによって特定の結果を高めるブループリントを設定する準備ができました:
-
[グローバルメニュー] → [アプリケーション] (Search Experiences) から [ブループリント] をクリックして、ブループリントアプリケーションを開きます。
-
Add() をクリックしてブループリントを追加します。
-
[新規検索ブループリント]ウィンドウで、ブループリントに[name] (必須) と[description](オプション) を指定します。
-
クエリビルダー を使用して、Boost Proximity要素を追加してください。
- フィールドを
expando__keyword__custom_fields__location_geolocation
として設定します。 - 減衰を0.8に設定します。
- スケールを10kmに設定します。
- ブーストの値を100に設定します。
- フィールドを
-
ブループリントを構築し、構成しながらテストします。 [プレビュー] をクリックします。
-
現在地のユーザーの検索体験をモデル化するには、歯車のアイコン()をクリックして、あなたのパブリックIPV4アドレスを検索コンテキストに設定します。
- キー:
search.experiences.ip.address
。 - 値:
[自分のパブリックIPV4アドレス]
。
- キー:
[完了] をクリックします。
-
キーワード ブログ を入力し、現在地から近いブログのエントリーが、遠いブログのエントリーよりも先に返されることを確認する。
-
ブループリントの作成が完了したら、 [保存] をクリックします。
これで、 ブループリントをLiferayの検索ページに適用することができます。
送信IPアドレスに近いかどうかで文書をスコアリングするガウス関数を調整する必要があるかもしれない:
Decay は、ユーザーとアセットの距離がスケールと等しい場合に、ブースト値を減少させる係数を定義します。
スケール は、ユーザーのIPアドレス位置からの距離で、これを超えると結果の関連性が低下し始める。
ブースト は、定義されたスケール内で結果をブーストするための数値である。
例えば、ユーザーから 10 km 以内に位置する検索結果に対して 100 のブーストを指定し、減衰係数を 0.5 と定義した場合、ユーザーからちょうど 10 km 離れた検索結果は最大ブースト値の半分、つまり 50 のブーストを受けます。 10km以上の距離では、ガウス関数が残りのスコアを決定することになります。
詳しくは ElasticのFunction Score Query ドキュメントをご覧ください。