获取搜索结果

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

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

关于文字搜索和通过搜索功能进行浏览搜索

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

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

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

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

文本查询搜索

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

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

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

浏览搜索内容

通常,使用网站导航浏览商品时,生成的结果相关性相同或按畅销商品排序。Google 搜索利用 AI 技术考虑热门程度、可购买性和个性化,优化浏览结果的排序方式。

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

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

为了获得正确的浏览搜索结果,搜索请求中的 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 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 搜索提供了多种搜索性能层级,可逐渐提升搜索结果的质量。例如,对于文本查询搜索用例,结果可能仅基于相关性。当您解锁更高级的性能层级时,搜索可以根据相关性、热门程度、收入优化和个性化返回结果。

当您上传的目录和用户事件数据达到每个层级的最低要求时,Google 搜索会自动解锁更高的性能层级。

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

评估文本搜索和浏览结果

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

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

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

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

  1. 转到 Search for Retail 控制台中的评估页面。

    转到“评估”页面

  2. 点击搜索标签页。

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

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

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

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

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

    例如,如果您已经针对黑色星期五促销了某些产品,则可以查看当天显示的结果。

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

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

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

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

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

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

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

  12. 可选:如果您选择了分面与结果一起显示的分面,请从分面列表中选择一个或多个分面值,以按这些值过滤结果。选择后结果会自动更新。

    当您选择同一分面的多个值时,这些值会作为 OR 运算符应用,而不同分面中的值会作为 AND 运算符应用。例如,选择分面“颜色”且值为“蓝色”和“金色”,并且材质值为“棉”和“涤纶”之后。您的搜索结果必须包含“蓝色”或“金”属性,同时还必须包含“棉”或“涤纶”属性。

浏览

  1. 转到 Search for Retail 控制台中的评估页面。

    转到“评估”页面

  2. 点击浏览标签页。

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

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

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

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

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

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

    例如,如果您已经针对黑色星期五促销了某些产品,则可以查看当天显示的结果。

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

  8. 可选:选择要与结果一起显示的分面,然后点击确定进行应用。

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

  9. 点击浏览预览或在任意输入字段中按 Enter 键以查看结果。

    结果中会显示对应的可用缩略图。

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

  11. 可选:如果您选择了分面与结果一起显示的分面,请从分面列表中选择一个或多个分面值,以按这些值过滤结果。选择后结果会自动更新。

    当您选择同一分面的多个值时,这些值会作为 OR 运算符应用,而不同分面中的值会作为 AND 运算符应用。例如,选择“颜色”和“材质”分面后,您可以选择颜色值“蓝色”和“金”以及材质值“棉”和“涤纶”来过滤搜索结果。您的结果必须包含“蓝色”或“金”属性,还必须具有“棉”或“涤纶”属性。

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