获取搜索结果

本页面介绍了基本的搜索查询,包括文本查询搜索、浏览搜索、分页、优化和个性化结果。

切勿缓存最终用户的个性化结果,也绝不将个性化结果返回给其他最终用户。

关于文本搜索和浏览搜索

Search 提供文本查询搜索和浏览搜索功能。

在文本查询搜索用例中,买家可能会在您的网站上输入基于文本的查询。搜索返回的搜索响应包含符合您设置的控件参数的商品,并按相关性和收入最大化进行排序。

在浏览用例中,买家可能会转到您的网站菜单并导航到特定商品类别。搜索会根据用户行为和趋势,自动选择能够带来最大收入的排序顺序。您可以根据您设置的控件进一步优化浏览结果。

文本搜索和浏览搜索请求都使用 servingConfigs.search 方法

文本查询搜索

当用户在您的网站上输入文本查询以进行搜索时,搜索功能会根据相关性、热门程度、可购买性和个性化对潜在搜索结果进行排序。

如果 servingConfigs.search 请求具有非空 query 字段,则搜索会将 servingConfigs.search 请求视为基于文本的搜索请求。

上传用户事件时,请将搜索生成的文本查询搜索事件作为 search 用户事件发送。如果事件包含非空 userEvent.searchQuery 字段和空 userEvent.pageCategories 字段,则搜索会将该事件视为基于文本的搜索事件。

浏览搜索内容

通常,使用网站导航功能浏览产品产生的结果相关性完全相同,或者按畅销商品排序。Google 搜索利用 AI 根据热门程度、可购买性和个性化来优化浏览结果的排序方式。

servingConfigs.search 方法发送请求时,如果 query 字段为空,则搜索会将该请求视为浏览搜索请求。在这种情况下,结果基于 filterpageCategories 字段,以及进一步的优化和个性化(如有)。

上传用户事件时,请确保将搜索生成的浏览搜索事件作为 search 用户事件发送。如果 search 用户事件包含空的 userEvent.searchQuery 字段和非空的 userEvent.pageCategories 字段,则 Google 搜索会将该事件视为基于浏览的事件。

为了获得正确的浏览搜索结果,搜索请求中的 pageCategoriesfilter 值必须与您上传的用户事件中的 pageCategoriesfilter 值完全匹配。如果它们不完全匹配,则搜索请求中的数据可能无法识别,从而可能会对结果质量产生负面影响。浏览搜索只识别“pageCategories”中的第一个类别值。

使用搜索请求可同时获取文本搜索和浏览搜索的结果。 如需发出搜索请求,请使用 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 Editor 中点击操作演示

操作演示


分页

使用分页可以缩短查找时间并减少发送的响应的大小。

教程:分页

本教程介绍了如何在基于文本的搜索请求中控制分页。买家在商店中查找商品时,可以改善搜索结果导航。例如,用户可以使用页面大小功能限制搜索响应中的项数,也可以使用偏移功能跳转到首选页面。


如需遵循有关此任务的分步指导,请直接在 Cloud Shell Editor 中点击操作演示

操作演示


分页

如需从一个页面跳转到另一页面,请根据您的用例使用 page_tokenoffset

要跳转到下一页,您可以使用 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,您可以获得生成的相关性为前 5 的产品以及 next_page_token

JSON

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

要获得具有下 5 个相关性(第 6 至第 10 个)的结果产品,您将使用与上一个 SearchResponse 中的 next_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);
  }
}

例如,如果您想要结果的第 10 页,那么当页面大小为 5 时,您可以将 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
}

搜索性能层级

Google 搜索提供了多种搜索性能层级,可让您获得更好的结果。例如,对于文本查询搜索用例,结果可能仅基于相关性。随着您解锁更高级的性能层级,搜索可以返回基于相关性、热门程度、收入优化和个性化的结果。

如果您上传的清单和用户事件数据符合每个层级的最低要求,则 Search 会自动解锁更高的性能层级。

Search for Retail 控制台上的数据质量页面会评估您满足每个层级的要求。如需详细了解如何使用此页面查看数据质量和搜索性能层级,请参阅解锁搜索性能层级

评估文本搜索和浏览结果

在更新网站代码以请求文本搜索或浏览搜索结果之前,您可以预览结果,以确认服务配置是否按预期运行。

如需详细了解服务配置,请参阅服务配置简介

您可以从评估页面预览服务配置结果,也可以通过在控制台中转到服务配置的详细信息页面并点击其评估标签页来预览服务配置结果。以下步骤展示了如何从评估页面进行预览。

要预览您的服务配置返回的结果,请执行以下操作:

  1. 前往 Search for Retail 控制台中的评估页面。

    转到“评估”页面

  2. 点击搜索标签页。

  3. 选择要预览的服务配置。

  4. 选择包含要预览的目录的目录分支。

  5. 可选:输入访问者 ID 以预览相应用户的搜索结果。

  6. 可选:输入用户 ID 以预览该用户的搜索结果。

  7. 可选:输入搜索时间,以预览在指定时间显示的搜索结果。

    例如,如果您在黑色星期五促销了某些产品,则会看到当天显示的结果。

  8. 可选:选择要在搜索结果旁边显示的分面,然后点击确定以应用分面。

    您选择的构面用于生成构面过滤条件列表,该列表会在执行初始搜索后显示在添加分面下。这些构面过滤条件可以包含您在此步骤中选择的构面以外的其他构面,例如动态分面。

  9. 输入基于文本的搜索查询可预览该查询的搜索结果。

  10. 点击搜索预览或在任意输入字段中按 Enter 键即可查看结果。

    搜索结果会显示可用的缩略图。

    如果您的搜索触发了重定向控件,系统会显示一条通知,其中会显示重定向 URI。

  11. 可选:点击网格图标或列表图标可切换搜索结果在预览中的显示方式。

  12. 可选:如果您选择了要在结果旁边显示的构面,请从构面列表中选择一个或多个构面值,以按这些值过滤结果。结果会在您做出选择后自动更新。

    当您选择同一构面的多个值时,这些值将按照 OR 运算符进行应用,而不同分面的值将按照 AND 运算符进行应用。例如,选择“color”分面、值“blue”和“gold”,材质值为“cotton”和“polyester”。搜索结果必须具有“blue”或“gold”属性,并且必须具有“cotton”或“polyester”属性。

浏览

  1. 前往 Search for Retail 控制台中的评估页面。

    转到“评估”页面

  2. 点击浏览标签页。

  1. 选择要预览的服务配置。

  2. 选择包含要预览的目录的目录分支。

  3. 可选:输入访问者 ID 以预览该用户的结果。

  4. 可选:输入用户 ID 以预览该用户的结果。

  5. 如需预览添加特定过滤条件后的结果,请输入过滤条件字符串。使用过滤条件文档中指定的过滤条件表达式语法。

  6. 可选:输入浏览时间,以预览在指定时间显示的结果。

    例如,如果您在黑色星期五促销了某些产品,则会看到当天显示的结果。

  7. 输入要测试浏览结果的网页类别。

  8. 可选:选择要在结果旁边显示的分面,然后点击确定以应用分面。

    您选择的构面用于生成构面过滤条件列表,该列表会在执行初始搜索后显示在添加分面下。这些构面过滤条件可以包含您在此步骤中选择的构面以外的其他构面,例如动态分面。

  9. 点击 Browse preview,或在任意输入字段中按 Enter 键以查看结果。

    显示的结果将连同可用的缩略图一起显示。

  10. 可选:点击网格图标或列表图标可切换结果在预览中的显示方式。

  11. 可选:如果您选择了要在结果旁边显示的构面,请从构面列表中选择一个或多个构面值,以按这些值过滤结果。结果会在您做出选择后自动更新。

    当您选择同一构面的多个值时,这些值将按照 OR 运算符进行应用,而不同分面的值将按照 AND 运算符进行应用。例如,在选择“color”和“material”分面后,您可以通过选择颜色值“blue”和“gold”,以及材质值“cotton”和“polyester”来过滤搜索结果。您的结果必须具有“blue”或“gold”属性,并且必须具有“cotton”或“polyester”属性。

如需查看您正在预览的服务配置的详细信息页面,请点击选择服务配置字段下的查看服务配置