获取搜索结果

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

唯一的用户会话标识符

必需的 visitor_id 字符串字段用于唯一标识单个设备上的用户。它充当持久性会话标识符,使 Vertex AI Search 商务解决方案 能够跟踪特定用户在整个购物历程中的行为。

Vertex AI Search 商务解决方案会使用与特定 visitor_id 关联的历史记录来训练模型并提供个性化的搜索结果。系统会根据请求中提供的特定 visitor_id 动态生成结果。例如,如果某位访问者经常查看绿色连衣裙,模型会使用 visitor_id 在日后识别出该访问者,并在其搜索结果中优先显示类似商品。因此,在用户事件提取(跟踪)和搜索或推荐请求(服务)中,访问者 ID 的格式必须完全相同。

相关性与匹配不同。匹配是指在索引中查找与用户搜索查询对应的候选商品。另一方面,相关性是指匹配程度。它涉及以最能满足用户意图和需求的方式对这些产品进行排名。 Vertex AI Search 商务解决方案采用多种技术来提高匹配度和相关性,从而为用户提供更好的整体搜索体验,满足零售商的需求。

搜索默认按相关性排序。不过,在默认搜索或明确的商品发现请求中,可能会在底部显示一些不相关的商品。只有在您设置 orderBy 时,此效果才会变得明显,因为这会减小搜索结果的总体大小。召回规模会减小,因为之前在默认搜索结果底部返回的相关性较低的商品会被过滤掉一部分。请阅读下一部分,了解如何自定义搜索。

Vertex AI Search 商务解决方案在搜索中默认采用相关性。不过,搜索功能经过调整,还会在搜索结果中靠前显示相关性略低的商品,以便为零售商提供更具针对性的搜索结果,从而提高用户事件的转化潜力。

这些新增的搜索功能可优化默认相关性算法,提供根据每个零售商的使用情况配置文件调整的非默认功能,包括:

  • 可按价格、高评分或畅销商品等条件对结果进行排序。非默认搜索经过自定义,可返回具有正确产品款式/规格的特定搜索结果。例如,按价格排序时显示最便宜或最贵的款式。

  • 针对非默认用户事件自动应用更严格的相关性过滤条件。

  • 支持调整强度提升/掩埋控件,以微调搜索结果。

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

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

在浏览用例中,买家可能会前往您的网站菜单,然后导航到特定商品类别。搜索功能会通过学习用户行为和趋势,自动选择可最大限度提高收入的排序顺序。您还可以通过设置的控件进一步优化浏览结果。

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

文本查询搜索

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

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

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

如何处理文本查询和参数

标准查询会经过语言分析,该分析会去除标准标点符号。过滤字符串严格区分大小写。了解如何处理文本查询和参数对于在 Vertex AI Search 商务解决方案中正确构建 API 请求至关重要。

  • 查询分词和标点符号:传递到 query 字段中的自然语言文本会经过自动语言分析和拼写更正。在此过程中,为了优化自然语言理解,系统通常会去除或忽略标准标点符号(例如逗号、句点、+-)。
  • 参数严格区分大小写:虽然标准文本查询通常不区分大小写,但程序化参数严格区分大小写。
    • 过滤条件:过滤条件表达式及其字面值字符串完全区分大小写。
    • 排序orderBy 表达式区分大小写。如果您按 products.title 等字段排序,引擎会将 Apple 排在 banana 前面,并将 banana 排在 artichoke 前面。一种解决方法是将全大写的商品名上传到单独的自定义属性(例如 attributes.title_upper),然后按该属性进行排序,以实现不区分大小写的排序。
  • 保留的特殊字符
    • > 字符严格保留为类别层次结构(例如 Categories > Shoes)的定界符。如果您的类别名称中自然出现 >,您必须在提取和查询之前将其替换为其他字符。
    • 建议过滤条件表达式中的文本值不支持 / 字符。

浏览搜索内容

浏览功能会使用网站导航来生成相关度相同的搜索结果,并按畅销商品进行排序。Google 搜索会利用 AI 考虑热门程度、可购买性和个性化因素,优化浏览结果的排序方式。

如需获得正确的浏览搜索结果,请考虑以下事项:

  • 搜索请求中的 pageCategoriesfilter 值必须与上传的用户事件中的 pageCategoriesfilter 值完全一致。如果请求中的参数与事件中的参数不匹配,则从事件中学习到的基于点击的重新排名模型对于此特定查询的效果不会很好,并且会对结果质量产生负面影响。

  • 如果 search 用户事件具有空的 userEvent.searchQuery 字段和非空的 userEvent.pageCategories 字段,Vertex AI Search 商务解决方案会将其归类为基于浏览的事件。因此,您需要确保在上传由 Vertex AI Search 商务解决方案 生成的浏览事件时,将其作为 search 用户事件发送。

  • 浏览过滤条件必须有效,并且必须针对每项浏览查询指明哪些商品属于用户正在浏览的商品类别。如需实现此设置,需要在 filterpage_category 字段中定义类别 ID。例如,如果您希望搜索结果定位到“家居与园艺”类别,首先,只有 filter 值为 "in-stock" 时,搜索不够精细,无法提供最佳浏览结果。如需提供仅限“家居与园艺”的搜索结果,您不仅需要在网页类别中设置 "Home \& Garden",还需要在包含 categories: ANY("Home & Garden") 的过滤条件中设置 "Home \& Garden"。如果您未在过滤条件部分定义类别,浏览结果可能会过于宽泛,包含许多非家居与园艺商品。

如果服务请求和事件的查询字段为空,但 page_categories 字段已填充,则会被视为浏览请求和用户事件。page_categories 字段用于指定浏览页面本身。当 servingConfigs.search 方法发送请求时,如果 query 字段为空,搜索会将该请求视为浏览搜索请求。在这种情况下,结果将基于 filterpageCategories 字段,以及(如果可用)更多优化和个性化设置。

您可以在两者中都设置类别,如本例所示:

JSON

page_category: "Home & Garden"
filter: "(availability: ANY("IN_STOCK")) AND (categories: ANY("Home & Garden"))"

否则,由于浏览功能适用于空字符串查询,因此指定类别中的商品不会自动显示在指定网页类别的结果中。换句话说,如果最终用户在浏览时未使用文本查询指定任何内容,即使该用户前往某个类别页面,搜索结果也可能无法有效定位。

使用搜索请求

使用搜索请求可获取文本搜索和浏览搜索的结果。 如需发出搜索请求,请使用 servingConfigs.search 方法。

所有搜索请求都需要 placement,用于标识将要使用的服务配置的完整资源名称。投放配置决定了哪些设置和关联的控件会影响搜索结果。

文本查询搜索请求需要包含非空的 query 字段。

浏览搜索请求需要包含非空的 pageCategories 字段。

Python

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库。 如需了解详情,请参阅 Vertex AI Search 商务解决方案 Python API 参考文档

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

import google.auth
from google.cloud.retail import SearchRequest, SearchServiceClient

project_id = google.auth.default()[1]


# get search service request:
def get_search_request(query: str):
    default_search_placement = (
        "projects/"
        + project_id
        + "/locations/global/catalogs/default_catalog/placements/default_search"
    )

    search_request = SearchRequest()
    search_request.placement = default_search_placement  # Placement is used to identify the Serving Config name.
    search_request.query = query
    search_request.visitor_id = "123456"  # A unique identifier to track visitors
    search_request.page_size = 10

    print("---search request:---")
    print(search_request)

    return search_request


# call the Retail Search:
def search():
    # TRY DIFFERENT QUERY PHRASES HERE:
    query_phrase = "Hoodie"

    search_request = get_search_request(query_phrase)
    search_response = SearchServiceClient().search(search_request)

    print("---search response---")
    if not search_response.results:
        print("The search operation returned no matching results.")
    else:
        print(search_response)
    return search_response


search()

Node.js

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

'use strict';

async function main() {
  // Call Retail API to search for a products in a catalog using only search query.

  // Imports the Google Cloud client library.
  const {SearchServiceClient} = require('@google-cloud/retail');

  // Instantiates a client.
  const retailClient = new SearchServiceClient();

  const projectId = await retailClient.getProjectId();

  // Placement is used to identify the Serving Config name.
  const placement = `projects/${projectId}/locations/global/catalogs/default_catalog/placements/default_search`;

  // Raw search query.
  const query = 'Hoodie'; //TRY DIFFERENT QUERY PHRASES

  // A unique identifier for tracking visitors.
  const visitorId = '12345';

  // Maximum number of Products to return.
  const pageSize = 10;

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  const callSearch = async () => {
    console.log('Search start');
    // Construct request
    const request = {
      placement,
      query,
      visitorId,
      pageSize,
    };
    console.log('Search request: ', request);

    // Run request
    const response = await retailClient.search(request, {
      autoPaginate: false,
    });
    const searchResponse = response[IResponseParams.ISearchResponse];
    if (searchResponse.totalSize === 0) {
      console.log('The search operation returned no matching results.');
    } else {
      console.log('Search result: ', JSON.stringify(searchResponse, null, 4));
    }
    console.log('Search end');
  };

  callSearch();
}

process.on('unhandledRejection', err => {
  console.error(err.message);
  process.exitCode = 1;
});

main();

Java

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库。 如需了解详情,请参阅 Vertex AI Search 商务解决方案 Java API 参考文档

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证


import com.google.cloud.ServiceOptions;
import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;
import java.io.IOException;
import java.util.UUID;

public class SearchSimpleQuery {

  public static void main(String[] args) throws IOException {
    String projectId = ServiceOptions.getDefaultProjectId();
    String defaultCatalogName =
        String.format("projects/%s/locations/global/catalogs/default_catalog", projectId);
    String defaultSearchPlacementName = defaultCatalogName + "/placements/default_search";

    searchResponse(defaultSearchPlacementName);
  }

  public static void searchResponse(String defaultSearchPlacementName) throws IOException {
    // TRY DIFFERENT QUERY PHRASES HERE:
    String queryPhrase = "Hoodie";
    String visitorId = UUID.randomUUID().toString();
    int pageSize = 10;

    SearchRequest searchRequest =
        SearchRequest.newBuilder()
            .setPlacement(defaultSearchPlacementName)
            .setQuery(queryPhrase)
            .setVisitorId(visitorId)
            .setPageSize(pageSize)
            .build();
    System.out.println("Search request: " + searchRequest);

    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (SearchServiceClient client = SearchServiceClient.create()) {
      SearchResponse searchResponse = client.search(searchRequest).getPage().getResponse();
      if (searchResponse.getTotalSize() == 0) {
        System.out.println("The search operation returned no matching results.");
      } else {
        System.out.println("Search response: " + searchResponse);
      }
    }
  }
}

默认情况下,系统会返回按相关性排序的合理数量的结果。

如需获取与搜索响应一起返回的产品特性,请务必在导入目录数据时提供特性值。Product 具有预定义系统特性(例如品牌、颜色和尺寸),您可以为其提供值。您还可以添加使用 Product.attributes 定义的自定义特性。

教程:查询

本教程介绍了如何向 Vertex AI Search 商务解决方案 服务发送基于文本的搜索查询并分析响应。


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

操作演示


使用自动补全建议过滤搜索结果

如果您已在前端实现增强型自动补全建议(用户可以选择与特定品牌或类别组合的搜索查询),则必须将该选择转换为经过过滤的 SearchRequest

为实现此目的,请提取文字建议并将其放入 query 字段中,然后提取所选属性(例如品牌)并将其格式化为 filter 字段中的表达式。

来自过滤建议的搜索请求示例

如果用户在 Nike 中点击了建议 shoe,请按如下方式构建 SearchRequest

{
  "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search",
  "query": "shoe",
  "filter": "brands: ANY(\"Nike\")",
  "visitorId": "user_session_123"
}

向建议分面添加商品数量

为了进一步提升过滤体验,您可以在用户执行搜索之前显示每个建议过滤条件的可用商品数量。如需使用带有商品数量的建议分面,您必须与支持团队联系以启用该功能。启用后,请在 SearchRequestfacetSpecs 中添加特定的文本型分面键,至少添加 7 天,以便系统根据您的搜索历史记录数据计算商品数量。

分页

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

教程:分页

本教程介绍了如何在基于文本的搜索请求中控制分页。 买家在商店中查找商品时,可以通过搜索结果改进浏览体验。例如,他们可以使用页面大小功能限制搜索响应中的商品数量,也可以使用偏移功能跳转到自己偏好的页面。


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

操作演示


分页

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

Python

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库。 如需了解详情,请参阅 Vertex AI Search 商务解决方案 Python API 参考文档

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证


import google.auth
from google.cloud.retail import SearchRequest, SearchServiceClient

project_id = google.auth.default()[1]


# get search service request:
def get_search_request(query: str, page_size: int, offset: int, next_page_token: str):
    default_search_placement = (
        "projects/"
        + project_id
        + "/locations/global/catalogs/default_catalog/placements/default_search"
    )

    search_request = SearchRequest()
    search_request.placement = default_search_placement
    search_request.visitor_id = "123456"  # A unique identifier to track visitors
    search_request.query = query
    search_request.page_size = page_size
    search_request.offset = offset
    search_request.page_token = next_page_token

    print("---search request:---")
    print(search_request)

    return search_request


# call the Retail Search:
def search():
    # TRY DIFFERENT PAGINATION PARAMETERS HERE:
    page_size = 6
    offset = 0
    page_token = ""

    search_request_first_page = get_search_request(
        "Hoodie", page_size, offset, page_token
    )
    search_response_first_page = SearchServiceClient().search(search_request_first_page)

    print("---search response---")
    if not search_response_first_page.results:
        print("The search operation returned no matching results.")
    else:
        print(search_response_first_page)

    # PASTE CALL WITH NEXT PAGE TOKEN HERE:

    # PASTE CALL WITH OFFSET HERE:

    return search_response_first_page


search()

Node.js

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证

async function main() {
  // Imports the Google Cloud client library.
  const {SearchServiceClient} = require('@google-cloud/retail');

  // Instantiates a client.
  const retailClient = new SearchServiceClient();

  const projectId = await retailClient.getProjectId();

  // Placement is used to identify the Serving Config name.
  const placement = `projects/${projectId}/locations/global/catalogs/default_catalog/placements/default_search`;

  // Raw search query.
  const query = 'Hoodie';

  // A unique identifier for tracking visitors.
  const visitorId = '12345';

  // Maximum number of Products to return.
  const pageSize = 6; // TRY DIFFERENT PAGE SIZES, INCLUDING THOSE OVER 100

  // A 0-indexed integer that specifies the current offset in search results.
  const offset = 0; // TRY DIFFERENT OFFSETS TO SEE DIFFERENT PRODUCTS

  //A page token received from a previous search call.
  let pageToken = '';

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  const callSearch = async () => {
    console.log('Search start');
    // Construct request
    const request = {
      placement,
      query,
      visitorId,
      pageSize,
      offset,
      pageToken,
    };

    // Run request
    const response = await retailClient.search(request, {
      autoPaginate: false,
    });
    const searchResponse = response[IResponseParams.ISearchResponse];
    if (searchResponse.totalSize === 0) {
      console.log('The search operation returned no matching results.');
    } else {
      console.log('Search result: ', JSON.stringify(searchResponse, null, 4));
      pageToken = response[IResponseParams.ISearchResponse].nextPageToken;
      console.log(
        'Next page token:',
        response[IResponseParams.ISearchResponse].nextPageToken
      );
    }
    console.log('Search end');
  };

  // Call search
  await callSearch();

  //PASTE CALL WITH NEXT PAGE TOKEN HERE:
}

Java

如需了解如何安装和使用 Vertex AI Search 商务解决方案客户端库,请参阅 Vertex AI Search 商务解决方案客户端库。 如需了解详情,请参阅 Vertex AI Search 商务解决方案 Java API 参考文档

如需向 Vertex AI Search 商务解决方案进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证


import com.google.cloud.ServiceOptions;
import com.google.cloud.retail.v2.SearchRequest;
import com.google.cloud.retail.v2.SearchResponse;
import com.google.cloud.retail.v2.SearchServiceClient;
import java.io.IOException;
import java.util.UUID;

public class SearchWithPagination {

  public static void main(String[] args) throws IOException {
    String projectId = ServiceOptions.getDefaultProjectId();
    String defaultCatalogName =
        String.format("projects/%s/locations/global/catalogs/default_catalog", projectId);
    String defaultSearchPlacementName = defaultCatalogName + "/placements/default_search";

    searchResponse(defaultSearchPlacementName);
  }

  public static void searchResponse(String defaultSearchPlacementName) throws IOException {
    // TRY DIFFERENT PAGINATION PARAMETERS HERE:
    int pageSize = 6;
    String queryPhrase = "Hoodie";
    int offset = 0;
    String pageToken = "";
    String visitorId = UUID.randomUUID().toString();

    SearchRequest searchRequest =
        SearchRequest.newBuilder()
            .setPlacement(defaultSearchPlacementName)
            .setVisitorId(visitorId)
            .setQuery(queryPhrase)
            .setPageSize(pageSize)
            .setOffset(offset)
            .setPageToken(pageToken)
            .build();
    System.out.println("Search request: " + searchRequest);

    // Initialize client that will be used to send requests. This client only
    // needs to be created once, and can be reused for multiple requests. After
    // completing all of your requests, call the "close" method on the client to
    // safely clean up any remaining background resources.
    try (SearchServiceClient client = SearchServiceClient.create()) {
      SearchResponse searchResponseFirstPage = client.search(searchRequest).getPage().getResponse();
      if (searchResponseFirstPage.getTotalSize() == 0) {
        System.out.println("The search operation returned no matching results.");
      } else {
        System.out.println("Search response: " + searchResponseFirstPage);
      }

      // PASTE CALL WITH NEXT PAGE TOKEN HERE:

      // PASTE CALL WITH OFFSET HERE:
    }
  }
}

页面令牌

要跳转到下一页,您可以使用 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 直接跳转到特定位置,而不是在网页之间导航或获取相关性最高的结果。

例如,如果您想要结果的第 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 for commerce 控制台的数据质量页面上,您可以查看自己满足了每个层级的哪些要求。

评估文本搜索和浏览结果

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

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

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

如需预览投放配置返回的结果,请执行以下操作:

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

    前往“评估”页面

  2. 点击搜索标签页。

  3. 选择要预览的投放配置。

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

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

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

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

    例如,如果您为某些商品宣传了特价促销活动,则可以查看这些商品在特价促销活动当天的展示效果。

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

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

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

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

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

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

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

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

    如果您选择同一构面的多个值,系统会像使用 OR 运算符一样应用这些值;如果您选择不同构面的值,系统会像使用 AND 运算符一样应用这些值。例如,在选择构面颜色和值“蓝色”及“金色”,以及材质值“棉”和“涤纶”后。搜索结果必须具有“蓝色”或“金色”属性,还必须具有“棉”或“涤纶”属性。

浏览

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

    前往“评估”页面

  2. 点击浏览标签页。

  1. 选择要预览的投放配置。

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

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

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

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

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

    例如,如果您为某个特惠活动宣传了特定商品,则可以查看这些商品在活动当天的展示效果。

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

  8. (可选)选择要与结果一起显示的属性,然后点击确定以应用这些属性。

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

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

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

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

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

    如果您选择同一构面的多个值,系统会像使用 OR 运算符一样应用这些值;如果您选择不同构面的值,系统会像使用 AND 运算符一样应用这些值。例如,在选择构面颜色材质后,您可以通过选择颜色值“蓝色”和“金色”以及材质值“棉”和“涤纶”来过滤搜索结果。结果必须具有“蓝色”或“金色”属性,还必须具有“棉”或“涤纶”属性。

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