検索結果を取得する

このページでは、テキストクエリ検索、ブラウジング検索、ページ分け、最適化、カスタマイズされた結果など、Retail Search の基本的なクエリについて説明します。

カスタマイズされた結果をエンドユーザーからキャッシュに保存したり、カスタマイズされた結果を別のエンドユーザーに戻したりすることはありません。

Retail Search を使用したテキスト検索とブラウジング検索について

Retail Search は、テキストクエリ検索機能とブラウズ検索機能の両方を提供します。

テキストクエリ検索のユースケースでは、買い物客がサイトにテキストベースのクエリを入力する場合があります。Retail Search では、設定したコントロールのパラメータ内に収まる商品を含む検索レスポンスが、関連性と収益の最大化でソートされて返されます。

ブラウジングのユースケースでは、買い物客がサイトメニューから、特定の商品カテゴリに移動する可能性があります。Retail Search は、ユーザーの行動やトレンドから学習し、収益を最大化する表示順を自動的に選択します。ブラウジングの結果は、設定したコントロールでさらに絞り込むことができます。

テキスト検索リクエストとブラウジング検索リクエストの両方で、servingConfigs.search メソッドが使用されます。

テキストによるクエリ検索

ユーザーがサイト内検索用にテキストクエリを入力すると、関連性、人気、購入可能性、カスタマイズに基づいて、検索結果の候補が並べ替えられます。

空でない query フィールドがある場合、servingConfigs.search リクエストはテキストベースの検索リクエストと見なされます。

ユーザー イベントをアップロードするときは、検索で生成されたテキストクエリ検索イベントを search ユーザー イベントとして送信します。イベントに空でない userEvent.searchQuery フィールドと空の userEvent.pageCategories フィールドがある場合、Retail Search はそれをテキストベースの検索イベントとみなします。

ブラウジング検索

通常、サイト ナビゲーションを使用して商品をブラウジングすると、関連性が全て同じ結果、またはベストセラー商品で並べ替えられた結果が生成されます。 Retail Search は、AI を活用して、人気度、購入可能性、カスタマイズを考慮してブラウジング結果の並べ替え方法を最適化します。

servingConfigs.search メソッドでリクエストが送信されると、query フィールドが空の場合、Retail Search はブラウジング検索リクエストと見なします。その場合、結果は filter フィールドと pageCategories フィールド、可能な場合はさらなる最適化やカスタマイズに基づいて生成されます。

ユーザー イベントをアップロードするときは、Retail Search によって生成されたブラウジング検索イベントを search ユーザー イベントとして送信するようにしてください。検索では、空の userEvent.searchQuery フィールドと空でない userEvent.pageCategories フィールドがある場合、search ユーザー イベントが閲覧ベースのイベントとみなされます。

正しいブラウジング検索結果を得るには、検索リクエスト内の pageCategoriesfilter の値が、アップロードされたユーザー イベントの pageCategoriesfilter の値と完全に一致する必要があります。完全に一致しない場合、検索リクエスト内のデータが認識されず、結果の品質に悪影響を及ぼす可能性があります。

検索リクエストを使用して、テキスト検索とブラウジング検索の両方の結果を取得します。 検索リクエストを行うには、servingConfigs.search メソッドを使用します。

すべての検索リクエストに placement が必要です。それによって使用されるサービス構成の完全なリソース名を識別します。サービス構成により、検索結果に影響を与える設定と関連コントロールが決まります。

テキストクエリ検索リクエストには、空でない query フィールドが必要です。

ブラウジング検索リクエストには、空でない pageCategories フィールドが必要です。

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProducts(String query) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

デフォルトでは、関連性の順に並べた結果での妥当な数が返されます。

検索レスポンスで返される商品属性を取得するには、カタログデータをインポートする際に必ず属性値を指定してください。 Product には、ブランド、色、サイズなどの事前定義されたシステム属性があり、値を指定できます。Product.attributes で定義したカスタム属性を含めることもできます。

クエリのチュートリアル

このチュートリアルでは、テキストベースの検索クエリを Vertex AI Search for Retail サービスに送信し、そのレスポンスを分析する方法について説明します。


このタスクを Cloud Shell エディタで直接行う際のガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


ページ分け

ページ分けを使用すると、ルックアップ時間や送信されるレスポンスのサイズを削減できます。

ページ分けのチュートリアル

このチュートリアルでは、テキストベースの検索リクエストでページネーションを制御する方法を示します。買い物客が店内の商品を検索する際に、検索結果を通してナビゲーションを向上できます。たとえば、ページサイズ機能を使用して検索レスポンス内のアイテム数を制限したり、オフセット機能を使用して目的のページにジャンプしたりできます。


このタスクを Cloud Shell エディタで直接行う際のガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


ページ設定

ページ間を移動するには、ユースケースに応じて page_token または offset を使用します。

次のページに移動するには、page_token を使用します。たとえば、次の SearchRequest を送信するとします。

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
}

SearchResponse から、next_page_token とともに、関連性のある商品の上位 5 つの結果を取得します。

JSON

{
  results: [
    products{...}, products{...}, products{...}, products{...}, products{...}
  ]
  next_page_token: "wY4ETNkBDOlVjZ0YWLzUmM40SMhVjMtADMwATL5UGN5MGZlVDJaIQ5LaYsQUw9fC6lIwgE1EgC"
  total_size: 100
  search_token: "NtQKDAiXt4_3BRDCg_jnARABGiQ1ZWRjOTRlOC0wMDAwLTI1YTEtODJlMy1mNGY1ZTgwZDUxOGM"
}

次の 5 つの関連性(6~10 番目)で結果を取得するには、前の SearchResponsenext_page_token と同じ placementvisitor_idquery を使用して page_token を設定します。

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProducts_withNextPageToken(String query, int pageSize)
    throws IOException, InterruptedException {
  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchRequest firstRequest = SearchRequest.newBuilder()
        .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
        .setBranch(DEFAULT_BRANCH_NAME)
        .setVisitorId(VISITOR_ID)
        .setQuery(query)
        .setPageSize(pageSize)
        .build();

    SearchResponse firstResponse = searchClient.search(firstRequest).getPage()
        .getResponse();
    System.out.println("First search response: " + firstResponse);

    SearchRequest secondRequest = SearchRequest.newBuilder()
        .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
        .setBranch(DEFAULT_BRANCH_NAME)
        .setVisitorId(VISITOR_ID)
        .setQuery(query)
        .setPageSize(pageSize)
        .setPageToken(firstResponse.getNextPageToken())
        .build();

    SearchResponse secondResponse = searchClient.search(secondRequest).getPage()
        .getResponse();
    System.out.println("Second search response: " + secondResponse);
  }
}

この例では、SearchRequest は次のようになります。

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
  page_token: "wY4ETNkBDOlVjZ0YWLzUmM40SMhVjMtADMwATL5UGN5MGZlVDJaIQ5LaYsQUw9fC6lIwgE1EgC"
}

また、別の場合には、ページ間を移動する、または関連性の最も高い結果を得るのではなく、offset を使用して特定の位置に直接移動することもできます。

Java

import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;

public static void searchProducts_withOffset(String query, int pageSize,
    int offset) throws IOException, InterruptedException {
  SearchRequest searchRequest = SearchRequest.newBuilder()
      .setPlacement(DEFAULT_SEARCH_PLACEMENT_NAME)
      .setBranch(DEFAULT_BRANCH_NAME)
      .setVisitorId(VISITOR_ID)
      .setQuery(query)
      .setPageSize(pageSize)
      .setOffset(offset)
      .build();

  try (SearchServiceClient searchClient = SearchServiceClient.create()) {
    SearchResponse response = searchClient.search(searchRequest).getPage().getResponse();
    System.out.println("Search response: " + searchResponse);
  }
}

たとえば、ページサイズが 5 で、結果の 10 ページ目が必要な場合は、offset を 45 に設定します。この値は (10 - 1) * 5 で計算されます。

JSON

{
  placement: 'projects/PROJECT_NUMBER/locations/global/catalogs/default_catalog/placements/default_search'
  visitor_id: 'VISITOR_ID'
  query: 'shoes'
  page_size: 5
  offset: 45
}

検索パフォーマンス階層

Retail Search には、結果をさらに向上させる複数の検索パフォーマンス階層が用意されています。たとえば、テキストクエリ検索のユースケースでは、結果は関連性のみに基づいている場合があります。より高度なパフォーマンス階層をロック解除すると、Retail Search は関連性、人気度、収益の最適化、カスタマイズに基づいた結果を返すことができます。

各階層の最小要件を満たすカタログとユーザー イベント データをアップロードすると、Retail Search は、上位のパフォーマンス階層を自動的にロック解除します。

Search for Retail コンソールの [データ品質] ページでは、各階層で満たされている要件の評価を確認できます。このページを使用してデータ品質と検索パフォーマンス階層を表示する方法については、検索パフォーマンス階層のロック解除をご覧ください。

テキスト検索とブラウジングの結果の評価

テキスト検索やブラウジング検索の結果をリクエストするためにウェブサイト コードを更新する前に、結果をプレビューして、サービス構成が期待どおりに機能していることを確認できます。

サービス構成について詳しくは、サービス構成についてをご覧ください。

サービス提供構成の結果は、[評価] ページから、または、コンソールでサービス提供構成の [詳細] ページにアクセスし、その [評価] タブをクリックしてプレビューできます。次の手順では、[評価] ページからプレビューする方法を説明します。

サービス構成で返される結果をプレビューするには:

  1. Search for Retail コンソールの [評価] ページに移動します。

    [評価] ページに移動

  2. [検索] タブをクリックします。

  3. プレビューするサービス構成を選択します。

  4. プレビューするカタログを含むカタログ ブランチを選択します。

  5. 省略可: ビジター ID を入力して、そのユーザーの検索結果をプレビューします。

  6. 省略可: ユーザー ID を入力して、そのユーザーの検索結果をプレビューします。

  7. 省略可: 検索時刻を入力して、指定した時刻に表示される検索結果をプレビューします。

    たとえば、ブラック フライデーに向けて特定のプロダクトをプロモーションした場合、その日に表示されるので結果を確認できます。

  8. 省略可: 結果と一緒に表示するファセットを選択し、[OK] をクリックして適用します。

    選択したファセットは、最初の検索を行った後に [ファセットの追加] に表示されるファセット フィルタのリストを生成するために使用されます。これらのファセット フィルタには、動的ファセットなど、このステップで選択したもの以外のファセットを含めることができます。

  9. テキストベースの検索クエリを入力して、そのクエリの検索結果をプレビューします。

  10. [検索プレビュー] をクリックするか、入力フィールドで Enter キーを押して結果を表示します。

    検索結果は利用可能なサムネイル画像とともに表示されます。

    検索でリダイレクト制御がトリガーされると、リダイレクト URI を表示する通知が表示されます。

  11. 省略可: [グリッド] アイコンまたは [リスト] アイコンをクリックして、検索結果のプレビューの表示方法を切り替えます。

  12. 省略可: 結果とともに表示するファセットを選択した場合は、ファセット リストから 1 つ以上のファセット値を選択し、それらの値で結果をフィルタリングします。結果は、選択時に自動的に更新されます。

    同じファセットの複数の値を選択すると、それらは OR 演算子として適用され、異なるファセット間の値は AND 演算子として適用されます。たとえば、ファセット「色」と値「青」と「ゴールド」、素材の値「コットン」と「ポリエステル」を選択するとします。検索結果には、属性として「青」または「ゴールド」が必要です。また、属性として「コットン」または「ポリエステル」も必要です。

参照

  1. Search for Retail コンソールの [評価] ページに移動します。

    [評価] ページに移動

  2. [ブラウジング] タブをクリックします。

  1. プレビューするサービス提供構成を選択します。

  2. プレビューするカタログを含むカタログ ブランチを選択します。

  3. 省略可: 訪問者 ID を入力して、そのユーザーの結果をプレビューします。

  4. 省略可: ユーザー ID を入力して、そのユーザーの結果をプレビューします。

  5. 省略可: 特定のフィルタを追加して結果がどのように表示されるかをプレビューするには、フィルタ文字列を入力します。フィルタのドキュメントで指定されたフィルタ式の構文を使用します。

  6. 省略可: ブラウジング時間を入力して、指定した時間に表示される結果をプレビューします。

    たとえば、ブラック フライデーに向けて特定のプロダクトをプロモーションした場合、その日に表示されるので結果を確認できます。

  7. ブラウジング結果をテストするページカテゴリを入力します。

  8. 省略可: 結果と一緒に表示するファセットを選択し、[OK] をクリックして適用します。

    選択したファセットは、最初の検索を行った後に [ファセットの追加] に表示されるファセット フィルタのリストを生成するために使用されます。これらのファセット フィルタには、動的ファセットなど、このステップで選択したもの以外のファセットを含めることができます。

  9. [ブラウジング プレビュー] をクリックするか、入力フィールドで Enter キーを押して、結果を表示します。

    検索結果は利用可能なサムネイル画像とともに表示されます。

  10. 省略可: [グリッド] アイコンまたは [リスト] アイコンをクリックして、結果のプレビューの表示方法を切り替えます。

  11. 省略可: 結果とともに表示するファセットを選択した場合は、ファセット リストから 1 つ以上のファセット値を選択し、それらの値で結果をフィルタリングします。結果は、選択時に自動的に更新されます。

    同じファセットの複数の値を選択すると、それらは OR 演算子として適用され、異なるファセット間の値は AND 演算子として適用されます。たとえば、ファセット「色」と「素材」を選択した後、色の値「青」と「ゴールド」、素材の値「コットン」と「ポリエステル」を選択して検索結果をフィルタリングするとします。 結果には、属性として「青」または「ゴールド」が必要です。また、属性として「コットン」または「ポリエステル」も必要です。

プレビューしているサービス提供構成の [詳細] ページを表示するには、[サービス提供構成を選択] フィールドで [サービス提供構成を表示] をクリックします。