You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Flutter中集成Google Retail Search时如何获取Facets数据?

解决Google Retail AI Search获取Facets及自动补全的问题

获取完整Facets数据的正确方式

你完全不需要拉取全量产品来构建筛选器,Google Retail Search本身支持在分页搜索请求中返回基于全量结果的完整Facets数据,只要在请求时做好参数配置即可:

  • 在构建SearchRequest时,明确指定需要获取的分面字段(比如品牌brand、分类category),同时通过facetSpecs配置每个分面的返回规则:
    • 设置足够大的limit值(比如100),确保能返回该字段下的所有可选值;
    • 可以指定排序规则,比如按选项对应的产品数量降序排列,方便用户优先看到热门选项。

示例Dart代码:

final searchRequest = SearchRequest(
  query: userInputKeyword,
  pageSize: 20, // 第一页返回的产品数量
  facets: ['brand', 'category'], // 要获取的分面字段列表
  facetSpecs: [
    FacetSpec(
      key: 'brand',
      limit: 100, // 足够大以覆盖所有品牌选项
      sortBy: FacetSortType.FACET_SORT_TYPE_COUNT_DESC,
    ),
    FacetSpec(
      key: 'category',
      limit: 50,
      sortBy: FacetSortType.FACET_SORT_TYPE_COUNT_DESC,
    ),
  ],
);

发送请求后,在SearchResponse的facets字段中就能拿到对应分面的完整数据,每个分面包含所有可选值及其对应的产品数量,直接用这些数据渲染筛选器组件即可。这里的Facets统计是基于整个搜索结果集,而非当前分页的产品,完全符合分页逻辑。

Google Retail Search自动补全实现思路

可以直接使用Google Retail的Suggestion服务来实现搜索词自动补全,步骤如下:

  • 调用SuggestService的suggest方法,传入用户当前输入的关键词前缀,指定需要的补全类型:
    • 如果只需要搜索词补全,设置suggestionTypes为QUERY_SUGGESTION;
    • 若还需要产品名称补全,可以额外添加PRODUCT_SUGGESTION。

示例Dart代码:

final suggestRequest = SuggestRequest(
  query: userInputPrefix,
  suggestionTypes: [SuggestionType.QUERY_SUGGESTION],
  pageSize: 5, // 控制返回的补全选项数量
);
final response = await retailClient.suggest(suggestRequest);
  • 将返回的suggestions列表中的suggestion字段提取出来,展示在搜索栏下方的下拉列表中,用户点击选项后直接触发对应的搜索请求。
  • 优化体验:可以添加输入防抖逻辑,比如用户停止输入300ms后再发送补全请求,减少无效的API调用次数。

内容的提问来源于stack exchange,提问作者RayOvO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:15:36