クエリルールの設定
Searchは自動的に関連性に基づいて結果を返しますが、Searchエクスペリエンス内で結果を調整したい場合もあります。
クエリルールでは、精密なルールを追加することで検索結果を変更できます。検索結果の構成を最適化し、調整できます。クエリルールは設定を補完するために設計されています。クエリルールに頼る前に、まず設定自体を調整してください。
クエリルールは「if-this-then-that(もし~ならば~する)」形式の仕組みです。クエリが特定のクエリルールのすべての基準を満たす場合、Searchアルゴリズムはそのルールで指定されたすべてのアクションを実行します。各エクスペリエンスに任意の数のクエリルールを追加することができます。
必要に応じて、特別なイベントやプロモーションなどのために、変更を一時的または特定の期間に限定することもできます。
ユースケースの例
クエリルールを使用すると、たとえば、業種やエンティティを強調表示したり、非表示にしたり、結果を返さないようにすることで、検索結果を編集できます。ユースケースの例には以下が含まれます:
- 解約を防ぐため、ある通信会社では、ユーザーが「アカウントのキャンセル」を検索すると、アカウントキャンセルに関するFAQを表示する前に、アルゴリズムが顧客の利用契約のダウングレードや一時停止の方法を強調表示した一連の結果をまず返すよう指定しています。
- ある金融サービス会社は、高価値セグメントに属するユーザーの場合には検索結果に融資担当者を優先的に表示しています。
- ある不動産グループは、数百のマイクロサイトにわたって一連のSearchエクスペリエンスを展開し、各マイクロサイトが特定の物件に関連するエンティティのみの結果を返すようにしたいと考えています。これは、参照元ページのURLに基づいて実現できます。
- コールセンターの負担を軽減するために、ある保険会社は、顧客が「カスタマーサポートに電話」と検索した場合、検索結果として「ライブチャット」を優先的に返します。
クエリルール構造
各クエリルールには3つの要素があります。
- 基準:クエリルールをトリガーするために満たす必要のある条件。
- アクション:すべての基準が満たされた場合に検索結果を調整するアクション。
- 名前:ルールの内容をすばやく識別するための任意の名前フィールド。
基準とアクションはそれぞれ独立して扱われるため、自由に組み合わせて使用できます。
条件
基準は、クエリルールを発動するために満たす必要がある条件を規定します。クエリルールを発動させるには、すべての基準を満たす必要があります。
基準のオプションは複数あり、5つのカテゴリに分類されます。
- 検索語句:ユーザーが入力する検索語句
- コンテキスト:ユーザーに関するプロパティが設定されたJavaScriptオブジェクトである、ユーザーのコンテキスト
- 参照元ページURL:ユーザーが検索を行った時点のウェブページのURL
- 検索タイプ:検索の種類(カテゴリまたはユニバーサル)
- カテゴリ:返されたカテゴリ
複数の基準を指定する場合、各基準オプションは1つのルールにつき1回のみ使用できます。
注:検索語句に基づく基準では、類義語は考慮されません。
検索語句
検索語句には無数の選択肢があるため、選択できる基準オプションも複数用意されています。検索語句は、特定の単語やフレーズと完全に一致する、含む、で始まる、のいずれかで判定できます。正規表現を使用すれば、さらに柔軟に設定することもできます。
正規表現
2つの基準オプションでは、検索語句または参照元ページURLが正規表現に一致するかどうかを確認できます。正規表現を使用すると文字のパターンを検索できるため、クエリの一致を判定する際により柔軟な対応が可能になります。
一般的な例:
正規表現の学習とテストに役立つリソース:
- https://regexone.com/ - 正規表現の例を用いた演習形式のサイト
- https://regex101.com/ - 正規表現をテストおよび検証できるサイト
たとえば、ユーザーが検索欄に電話番号を入力しており(この場合結果は返されません)、代わりにアカウントやログインに関するよくある質問sを返したい場合は、「###-###-####」の形式の数字を検索する正規表現^\d{3}-\d{3}-\d{4}$を検索語句が含む、という基準を設定できます。次に、目的のよくある質問の表示順位を引き上げるようにアクションを設定します。
別の例として、メインのホームページとヘルプサイトの両方に検索バーを統合しており、ユーザーの参照元に応じて結果を調整したい場合は、参照元ページURLがヘルプサイトのサブドメインの正規表現(例:[help.yext.com](http://help.yext.com/)*)を含む、という基準を設定できます。
コンテキスト
コンテキストオブジェクトは、任意のプロパティを設定できる任意のJavaScriptオブジェクトです。これは非常に柔軟で強力な概念であり、必要なデータを何でも渡してルール内で使用できます。コンテキストは、Search JavaScriptライブラリの関数を使って設定することも、ユーザーが検索を行うときに渡されるクエリパラメータを使って設定することもできます。
コンテキストに特定のキーが含まれているか、または条件内の特定の値と一致するかどうかを確認できます。
たとえば、求人サイトでは、ユーザーが求職者であるかどうかや、どの市場に属しているかといった値を設定することができます。ユーザーのコンテキストオブジェクトの例は以下のとおりです。
{
jobProspect: true,
market: "Mid-Atlantic"
}
求職者のみにコンテンツを表示するには、コンテキストがキーprospectを含む、という基準を設定します。さらに中大西洋地域の市場のユーザーを対象とするには、コンテキストのmarketが値Mid-Atlanticに一致する、という基準を使用します。
コンテキストの設定方法について詳しい手順は、「検索統合 - コンテキストの設定」ガイドをご覧ください。
検索タイプ
基準として、すべてのユニバーサル検索またはすべてのカテゴリ検索を指定できます。これは、ルールを全体に適用したい場合に便利です。たとえば、特定のクエリに基づいてコンテンツを強調するプロモカテゴリがある場合、すべてのユニバーサル検索に対してこのカテゴリに強調表示を適用できます。
縦
基準として特定のカテゴリまたはカテゴリの集合を指定できます。この場合、ユニバーサル検索、カテゴリ検索のいずれであっても、当該カテゴリが結果に表示されるたびに発動します。
アクション
すべての条件が満たされた場合、Searchのアルゴリズムが検索結果を調整するために行うのがそのアクションです。可能なアクションは次のとおりです:
- エンティティの強調表示と非表示設定:エンティティを結果の上位または下位に移動します
- カテゴリの強調表示と非表示:検索結果の上部または下部にカテゴリを移動します。
- 結果を返さない:特定のカテゴリのすべての結果を非表示にします
- フィルターを追加:結果にフィルターを適用します
- 固定結果を返す:指定した結果セットをそのまま返します
強調表示と非表示
エンティティやカテゴリの強調表示や除外は、よく使われるクエリルールのアクションです。特定のクエリに対して、特定のエンティティやカテゴリを他よりも優先または後回しにしたい場合があります。
たとえば、レストランに宣伝したい新メニュー項目がある場合、Menu Itemsカテゴリでそのエンティティを強調表示できます。四半期ごとに複数の新商品をリリースし、新商品を追跡する保存済みフィルターがある場合は、その保存済みフィルター内のエンティティを強調表示することで、Knowledge Graphを更新するたびに強調表示対象が自動的に更新されるようにできます。
エンティティ/カテゴリは以下の順番でランク付けされます:
- 強調表示アクションの一環として強調表示されたエンティティ/カテゴリは、ルールに記載されている順序で表示されます。
- その他のすべての事業体/カテゴリ。
- 下位表示アクションによって下位表示されたエンティティ/カテゴリ(ルール内に記載された順序で)
考慮すべき留意点:
- アクションが指定されていない場合、エンティティが結果に含まれていなければ、BOOST_ENTITIESアクションはデフォルトでそのエンティティを結果セットに追加します。これを調整するには、
forceResultsオプションをfalseに設定します。これにより、エンティティが既に検索結果に含まれている場合にのみ、BOOST_ENTITIESアクションが実行されるようになります。 - 強調表示されたエンティティとは異なり、除外されたエンティティは、その検索語句によって返されないものである場合、結果セットに追加されることはありません。エンティティの除外により、指定したエンティティはカテゴリの下位に表示されます。これにより、結果がユニバーサルページから完全に外れてしまう場合があります。ただし、その検索語句によってすでに返されていた結果であれば、引き続き返されます。結果を完全に非表示にしたい場合は、フィルターの追加アクションの使用を検討してください。
- カテゴリを強調表示しても、その検索に対して返されるエンティティがない場合、そのカテゴリは表示されません。エンティティを返したい場合は、エンティティ自体も強調表示する必要があります。
結果を返さない
特定のカテゴリまたはカテゴリの集合について、結果を返さないよう指定できます。たとえば、あるレストランが「エグゼクティブシェフ」で検索した際に、求人結果が返されないようにしたいと考えているとします。このクエリに対して求人カテゴリを完全に非表示にするには、結果を返さないアクションを使用できます。
フィルタを追加
Yext APIが受け付ける任意のフィルターを使用できます。保存済みフィルターの使用や、フィールドに基づく独自フィルターの構築も可能です。フィールドに基づいてフィルタを構築する方法については、エンティティ開発者向けドキュメントを参照してください。
ピン留めされた結果を返す
結果を固定する場合、カテゴリ、各カテゴリのエンティティまたは保存済みフィルター、そして直接回答を含む、返される結果セット全体を指定します。
固定された結果は控えめに使ってください。検索結果を固定すると、指定した条件に一致するクエリに対するアルゴリズムの動作を完全に上書きすることになり、予期せぬ結果が生じたり、メンテナンスが困難になったりする可能性があります。これは非常に手作業が多い操作であり、拡張性に欠けるため、最終手段としてのみ使用すべきです。
クエリルールを編集
プラットフォームUIから編集する
UIでクエリルールを設定するには:
- ナビゲーションバーの [検索] をクリックし、目的の検索エクスペリエンスをクリックします。
- [クエリルール(Query Rules)]をクリックします。
- [クエリルールを追加(Add Query Rule)]をクリックすると、ダイアログボックスが表示されます。
- ルールの名前を入力します。
- [+ 条件を追加(+ Add Criteria)]をクリックし、このルールをトリガーする条件オプションを選択します。テキストボックスに具体的な内容を入力します。
- [+ アクションを追加]をクリックし、このルールでトリガーするアクションを選択します。
- [クエリルールを保存(Save Query Rule)]をクリックします。
また、ドロップダウンからルールの削除またはルールの複製を選択することもできます。
JSONエディターで編集
クエリルールは検索構成の rules オブジェクトに含まれています。rules配列内には、クエリルールを表すオブジェクトを複数含めることができます。各オブジェクトには、criteriaオブジェクトとactions配列を含める必要があります。
"rules":[
{
"criteria": {
"searchTermContainsAll": [
"menu"
]
},
"actions": [
{
"actionType": "BOOST_ENTITIES",
"entityIds": [
"NEW-BURRITO"
],
"verticalKey": "menuItems"
}
],
"name": "Boost Menu Item"
}
]
クエリルールのトラブルシューティング
クエリルールのトラブルシューティングを行う前に、一般的なトラブルシューティング手順については「バックエンド検索問題のデバッグ開始方法」のドキュメントをご覧ください。
一般的なトラブルシューティングの手順
概略として、クエリルールの設定を(検索ログに表示される)アルゴリズムが返した結果と比較してください。
- クエリルールの設定を開きます。
- [検索(Search)] > [エクスペリエンス名(Experience Name)] > [クエリ規則(Query Rules)]の順に進みます。
- 設定された基準とアクションを確認します。
- 問題が発生しているクエリの検索ログを開きます。以下のいずれかを行います。
- [検索(Search)] > [エクスペリエンス名(Experience Name)] > [テスト検索(Test Search)] または [設定(Configuration)] のサブタブの順に進みます。テスト検索を実行し、ドロップダウンメニューから[クエリをデバッグ(Debug Query)]を選択します。
- ステージングまたは本番環境リンクですでに検索を実行している場合、Search > [エクスペリエンス名(Experience Name)]] > [検索ログ(Search Logs)] に移動し、該当する検索ログをクリックします。
- クエリルールが適用されたかどうかを確認するには、ルールが検索ログの検索要素ボックスに表示されているかどうかを確かめます。
- 検索ログにクエリルールが表示されていない場合は、クエリルールの基準を再確認し、検索がその基準を満たしているかを確認します。
- 基準が正規表現を使用している場合、正規表現パターンをデバッグツールで確認してください。
- 条件にコンテキストまたはリファラーページのURLが使用されている場合、それが検索に取り込まれたかどうかを確認します。これらは、検索要因ボックスのクエリパラメーター属性に表示されます。
- 基準にバーティカルキーまたは検索タイプが使用されている場合は、検索メタデータ内の検索タイプが正しいことを確認します。また、バーティカルキーが変更されていないことを再度確認してください。
- クエリルールが表示される(条件が満たされている)が、期待する業種またはエンティティが結果セットに含まれていない場合:
- フィールドAPI名、エンティティタイプAPI名、バーティカルキー、またはエンティティIDを参照する場合は、それらが正確に一致しており、変更されていないことを確認してください。
- 意図した通りになるように、アクションが適切に設定されていることを確認してください。例えば、エンティティを強調表示する場合、そのエンティティは返される順序でリストされているでしょうか。
クエリルールと同義語
クエリルールは、既存の設定を条件付きでオーバーライドすることを目的とした、ハードコードされたロジックであるため、Searchにおいてはすべてに優先されます。ただし、クエリルールはシノニムでは機能しません。
たとえば、ルールの基準がsearchTermExactlyMatches「靴」であり、「スニーカー」→「靴」という一方向の類義語を作成している場合、「スニーカー」で検索してもルールは発動しません。これを回避するには、より広いルール基準(たとえば、searchTermContains 「靴」または「スニーカー」)を使用するか、類義語ごとに個別のルールを作成してください。
コメント
0件のコメント
記事コメントは受け付けていません。