ソートとダイナミックリランキングの設定
エンティティのソートとは、バーティカル内でエンティティが表示される順序を管理する機能です。ソートはすべてのバーティカルに一律に適用されるのではなく、バーティカルごとに適用されます。Searchには、2種類のエンティティのソートがあります。
- Search設定のソート:Search設定ファイルで指定された、Search APIが返す結果のデフォルトの順序を変更します
- フロントエンドのソート(クライアント側のソート):フロントエンドで設定され、ユーザーがソートを変更できる機能です
本ユニットでは、Search設定における(デフォルトの)ソート順について説明します。クライアント側の並べ替えについては、フロントエンドコンテンツを確認してください:テーマの並べ替えドキュメント、SortOptions Search SDKコンポーネント、Search Endpoints、Search Core。
また、エンティティの表示順に影響を与える機能として、ダイナミックリランキングを有効にすることもできます。この機能では、アルゴリズムがクリックによるユーザーエンゲージメントに基づいて結果の順序を継続的に最適化します。
デフォルトの並べ替え順
デフォルトのソート順とは、特定のバーティカルでエンティティの結果が返される順序です。
バーティカルのSearch設定でデフォルトのソート順を設定しない場合、検索アルゴリズムが関連性(該当する場合はユーザーの位置情報による重み付けを含む)に基づいて自動的に決定します。
関連性以外の観点で順序を調整したい場合は、各バーティカルのデフォルトのソートをカスタマイズすることもできます。選択するソート方法は、返すコンテンツの種類や目的に応じて決定してください。
サポートされているソートオプションは4種類あります。
-
関連性(
RELEVANCE):エンティティが検索クエリにどの程度一致するかを表します。該当する場合は位置情報による重み付けも含まれます。関連性によるソートには、次の3種類のアルゴリズムから選択できます。- 標準: 適用されたすべてのアルゴリズムから計算されたスコアによって結果をランク付けします。
- バケット: 関連性スコアに基づいて結果をバケットにグループ化します。各バケット内で二次ソートが適用されます。
- 一致クエリトークン:クエリのトークンが結果にいくつ一致したかによって、結果の順位を決定します。
-
ランダム(
RANDOM):エンティティをランダムにソートします。 -
距離(
ENTITY_DISTANCE):ユーザーの現在地または意図する場所からの距離です。 距離での並べ替えがあまり実用的でない場合もあります。 たとえば、ある場所が別の場所より500フィート近いだけであれば、その程度の差はユーザーにとってほとんど重要ではありません。 そのような場合は、代わりに関連性でソートすべきです。- バケット化された距離機能は、連続した距離の値をメートル単位の離散的な範囲に変換し、距離と関連性の両方によるソートを容易にします。
-
場所のクラスタ分析(
groupCloseDistances) は、約10メートル以内にある場所間の距離を正規化し、指定した地点から同じ距離にあるものとして扱います。これにより、両方の場所が一貫して返され、希望のフィールドで並べ替えられ、同じ建物の両端や主要な場所から離れたATMなどのケースにも対応します。これはJSON経由でのみ追加できます。
-
カスタムフィールドによる昇順または降順(
FIELD):数値、日付、ブール型のフィールドを結果のソートに使用できます。設定の一環として、フィールド(存在し、内容が入力されていることを確認してください)と、昇順(ASC)または降順(DESC)のどちらでソートするかを指定する必要があります。注:JSONエディタを使用してフィールドのソートを追加する場合は、そのフィールドを検索可能なフィールドの中で
sortableとしてもリストに含める必要があります。
バーティカルにソート順を設定すると、デフォルトの関連性によるソートは適用されなくなります。ユーザーがクエリに最も一致する結果を最初に見られるよう、上書きするソートに関連性を含めることがベストプラクティスです。その上で、ビジネスロジックに応じてソートを設定できます。
注: 複数のソートを重ねる際の競合には注意してください。ランダムソートを実行すると、それ以降に行われる他のソートはすべて無効になります。
関連性アルゴリズム
多くの場合、各結果の関連性スコアは非常に細かく分かれているため、結果同士が同点になることはありません。より良い検索結果を得るために2次的なソートアルゴリズムを適用できるよう、結果間の同点を増やす2種類のアルゴリズムがあります。バケットと一致クエリトークンです。
2次的なソートを適用するには、1次的なソートスコアが同一である必要があります。同点になることは非常に少ないため、通常の関連性アルゴリズムでは2次的なソートが使用されることはあまりありません。クエリトークンアルゴリズムは同点を増やしますが、関連性は一致クエリトークンの数のみに基づいて計算されます。バケットアルゴリズムは両方を行います。すべてのアルゴリズムを使用して関連性を計算しつつ、同点を増やします。
バケットアルゴリズムは関連性スコアに基づいて結果をバケットに分類します。その後、各バケット内で二次ソートが適用されます。距離によるソートアルゴリズムではバケットを指定する必要がありますが、関連性によるソートでは、結果の関連性スコアに基づいてバケットが自動的に計算されます。
バーティカルに複数のソートオプションが適用されており、関連性を1次的なソートオプションとして使用している場合は、バケットアルゴリズムの使用をお勧めします。バケット化された関連性は、1次的なソートとしてのみ使用できます。
一致したクエリトークン機能は、検索結果に含まれるクエリ内の一致するトークンの数をカウントして、関連性スコアを決定します。これにより、同順位が増えることで、後続のソート基準の影響がより明確になります。
距離による並べ替えと位置情報フィルター
カテゴリ内の場所フィールドに設定できる推論フィルターは、最大1つです。これは、builtin.locationか、つまりエンティティのジオコード化された住所か、c_linkedEntity.builtin.locationのようにリンクされたエンティティに基づく推定場所のいずれかです。
DISTANCE並べ替えは、そのカテゴリで地理情報に基づく推論フィルターとして選択されたフィールドに適用されます。カテゴリに地理情報に基づく推論フィルターがない場合、DISTANCE並べ替えは常にエンティティ自体のジオコード化された住所を使用します。距離で並べ替えするために、推論フィルターを有効化する必要はありません。
リンクされたエンティティのフィールドがエンティティのリストである場合、推定場所による距離での並び替えは、リンクされたエンティティのうち最も近いものに基づいて行われます。
一般的なユースケース
エンティティの並び替えを上書きする使用例は数多くあります。並べ替え方法は1つのみを使用することも、複数の並び替えオプションを重ねて使用することもできます。よくある使用例をいくつかご紹介します。
-
人物(例:ファイナンシャルアドバイザーや医師):類似の場所で類似のサービスを提供する複数の人物がいる場合、特定の人物への不公平な優遇を避けるため、関連性で並び替えした後にランダムで並び替えします。この2つの間に、新規顧客/患者の受け入れ状況フィールドによる並び替えを追加することもできます。
特定の人物が意図せず優遇されることのないよう、一致クエリトークンを使用することもできます。たとえば「John Doe」というクエリの場合、Searchは完全一致である「John Doe」を最初に返しますが、名前に「John」または「Doe」が一致するすべてのアドバイザーも返します。名前に「John」または「Doe」を含む場合、トークンの一致に基づく関連性の値は1になります。これらの結果は同点となるため、Searchは次の基準(この例ではランダム)を使用して並び替え順を決定します。
- イベント:開始日時が近いイベントを先に表示するために、開始日時フィールドを昇順で並び替えします。
- 製品:新製品を優先的に表示するために、関連性で並び替えした後にカスタムの発売日フィールドで並び替えします。または、より高価な製品を上位に表示するために、関連性で並び替えした後に価格フィールドを降順で並び替えします。
デフォルトの並べ替え順を編集
デフォルトの並べ替え順を追加するには、次の2つの手順があります。
- 並べ替えに使用するフィールドは、タイプ「並べ替え可能」の検索可能フィールドとして指定します。
- UI経由で並び替えに追加されたフィールドは、自動的に並び替え可能として設定されます。
- JSONエディター経由で並び替えに追加されたフィールドは、並び替え可能として明示的にマークする必要があります。
- 下記で説明するデフォルトの並び替え順を追加します。
プラットフォームUIから編集する
UIでデフォルトの並び替え順序を設定するには、[カテゴリ(Verticals)]画面に移動し、目的のカテゴリを選択して、[並べ替え(Sorting)]タブをクリックします。[+並べ替えルールを追加(Add Sort Rules)]をクリックし、ドロップダウンからタイプを選択します。
- [関連性(Relevance)]を選択した場合は、関連性アルゴリズムとしてRegular、Query Tokens、Bucketsのいずれかを選択できます。
- [距離(Distance)]を選択した場合は、任意でバケットを指定できます(距離はすべてメートル単位です)。
- [フィールド(Field)]を選択した場合は、フィールドと並べ替えの方向を選択します。
注:このリストに含まれていないサブフィールドが存在する場合があります。並べ替え条件を追加したいフィールドが見つからない場合は、JSONエディタを使用して追加してください。
以下のスクリーンショットは、「レストラン」カテゴリにおけるデフォルトの並べ替え順の例で、関連性、バケット化された距離、そして予約受付フィールドの昇順によるフィールドの順に設定されています。
まず関連性で並び替えし、検索クエリに最も一致するレストランを返します。次に距離で並び替えし、ユーザーに最も近い場所を返します。ここでは距離の区分を使用します。距離のわずかな差はユーザーにとって重要ではない可能性が高いためです。最後にレストランが予約を受け付けているかどうかで並び替えし、予約可能な店舗をユーザーが先に確認できるようにします。
JSONエディターで編集
JSONエディターでデフォルトの並び替え順を設定するには、該当するカテゴリのsortBysプロパティにオブジェクトの配列を入力します。各オブジェクトは個別のソートルールを表します。
まず、searchableFields内で並び替えしたいフィールドの並び替えを有効にしてください:
"searchableFields": {
"time.start": {
"sortable": true
}
}
次に、 sortBys プロパティを使って各並び替えオプションを設定します。各タイプに該当する並べ替えオプションと追加プロパティのいずれかを入力して、 typeを確定してください。
"sortBys": [
{
"type": "RELEVANCE"
},
{
"direction": "ASC",
"field": "c_acceptingNewPatients",
"type": "FIELD"
}
]
上のUIスクリーンショットに表示されているのと同じデフォルトの並び替え順序は、JSONでは次のようになります。
"verticals": {
"restaurants": {
"searchableFields": {
"builtin.entityType": {
"nlpFilter": true
},
"name": {
"textSearch": true
},
"acceptsReservations": {
"sortable": true
}
},
"sortBys": [
{
"relevanceAlgorithm": "BUCKETS",
"type": "RELEVANCE"
},
{
"buckets": [
8046.72,
80467.2,
160934.0
],
"type": "ENTITY_DISTANCE",
"groupCloseDistances": "TRUE"
},
{
"direction": "ASC",
"field": "acceptsReservations",
"type": "FIELD"
}
]
}
}
動的な再ランク付け
Advanced Searchティアの機能:ダイナミック再ランキングはAdvanced Searchティアでのみ利用できます。各ティアで利用できる機能の詳細については、「Searchティア」のリファレンスドキュメントをご覧ください。
動的再ランキングは、機械学習を使用してユーザーエンゲージメントデータに基づき結果や回答を再順位付けします。カテゴリで動的再ランキングを有効にすると、アルゴリズムはクリック数に基づいて結果の順序を最適化するよう徐々に学習します。
これは、クリック数やコンバージョンを増やし、Searchエクスペリエンスをより効果的にする強力な機能です。ユーザーは求めていた結果が最初の位置に表示されると、Searchアルゴリズムの精度を信頼し、今後も利用する可能性が高くなります。弊社のテストでは、動的再ランキングによってクリック数を最大10%押し上げられることが示されています。
ユースケースの例
あるレストランでは、ユーザーが頻繁に「タコス」と検索していることがわかっていますが、数あるタコスのうちどれを最初に表示すべきかはどうすればわかるのでしょうか。タコスのメニュー項目はすべて、意味的な関連性は同等です。メニュー項目で動的再ランキングを有効にすると、ユーザーエンゲージメントデータを活用して、最もクリック数の多いタコスを先に表示できます。
よくある質問を使った別の例を見てみましょう。この例では、あるヘルスケア企業が、他の疾患とともに脳卒中に関する質問への回答を表示しています。ダイナミック再ランキングにより、「脳卒中リスク因子」というクエリの結果が改善されました。これまでは、高齢者の脳卒中リスク要因に関するよくある質問が最初に返されていました。しかし現在では、より多くのクリックを獲得しており関連性が高い、脳卒中のリスク評価に関する2つ目のよくある質問が最初に返されます。
プラットフォームUIから編集する
UIで動的リランキングを有効にするには、[カテゴリ]画面に移動し、目的のカテゴリを選択して[並び替え]タブをクリックします。次に[動的再ランキングを有効にする]のチェックボックスをオンにします。
JSONエディターで編集
JSONエディターで動的再ランキングを有効にするには、該当するカテゴリの下でdynamicRerankプロパティを設定し、ターゲットをCLICKSに設定します。
この機能を使用したよくある質問のSearch設定の例は以下のとおりです。
"verticals": {
"faqs": {
"entityType": "faq",
"dynamicRerank": {
"target": "CLICKS"
},
"searchableFields": {
"name": {
"semanticTextSearch": true
},
"keywords": {
"phraseMatch": true
}
}
}
}
コメント
0件のコメント
記事コメントは受け付けていません。