查询扩展是指在最初未找到或找到的结果太少时,逐步放宽查询限制以纳入更多结果。这会导致每个查询的结果大小发生调整。
如果查询没有相关文档,查询扩展功能会返回相关性较低的文档,以确保不会返回零个搜索结果。
与动态分面或投放控制不同,查询扩展无法直接在 Google Cloud 控制台中配置。您需要为每个搜索请求以编程方式配置查询扩展。请继续阅读,了解如何在 API 中配置查询扩展。
教程:查询扩展
本教程介绍了如何启用查询扩展功能。如果买家使用模棱两可或包含多个字词的搜索短语,可能会收到空响应。开启查询扩展功能后,系统会分析请求,并返回根据解析后的搜索查询扩展的商品列表。
如需遵循有关此任务的分步指导,请直接在 Cloud Shell Editor 中点击操作演示:
查询扩展概览
查询扩展是一项强大的功能,旨在提高搜索召回率,防止出现零结果情况,尤其是在用户查询长尾或复杂内容时。
查询扩展功能不会在商品目录中找不到完全匹配的商品时返回任何结果,而是会识别并显示相关或替代商品。这不仅能改善用户体验,还能提高转化率。
查询扩展的关键应用场景包括:
- 长尾查询:对于高度具体的搜索查询(例如糖尿病患者专用高蛋白低脂有机牛奶),目录中可能没有完全匹配的结果。查询扩展功能可以返回与部分意图匹配的产品,例如添加了“适合糖尿病患者饮用的牛奶”“高蛋白牛奶”属性或属性值的产品。
- 替代商品:如果用户搜索的品牌或商品不在目录中(例如 Starbucks coffee 100ml),查询扩展功能可以建议可供购买的替代咖啡品牌,从而避免搜索无果。
接下来的部分将重点介绍 Vertex AI Search for Commerce 中查询扩展功能的功能、触发机制和配置细微差别,并特别强调规范过滤条件的关键作用。
查询扩展触发机制
是否启用查询扩展功能或特定搜索查询的决定是自动做出的,并且基于可快速配置的规范过滤规则。
- 触发条件:只有当使用规范过滤查询的初始搜索产生的产品结果少于 3 个时,才会触发查询扩展。
- 阈值:此阈值默认为 3,可以更改。它适用于大多数电子商务使用情形,可确保仅在初始结果集确实稀疏时才激活查询扩展。
在 API 中配置查询扩展
使用 API 以编程方式为每个请求配置查询扩展,如下所示:
API 配置:您可以通过在
SearchRequest中添加queryExpansionSpec对象来控制查询扩展。设置:在
queryExpansionSpec中,您可以将condition字段设置为AUTO以启用该功能,也可以设置为DISABLED以关闭该功能(如果未指定,则为默认设置)。固定:您可以选择在请求中将
pinUnexpandedResults设置为true,以确保原始查询的完全匹配结果显示在搜索结果的顶部,然后是扩展结果。如需了解详情,请参阅固定页面。
配置规范过滤条件
为了使查询扩展功能能够有效触发,您必须在搜索请求中正确配置 canonical_filter。
为了正确实现查询扩展,务必要了解搜索请求中的两个主要过滤条件参数:顶级过滤条件和规范过滤条件。
顶级过滤条件 (
filter):这是在搜索结果返回给用户之前应用于搜索结果的主要过滤条件。它是两个潜在层的组合:业务/基本过滤条件:应用于所有搜索的预定义规则,通常无需直接用户输入,例如
inStock=TRUE, category="groceries", storeId="XYZ"。用户选择的分面过滤条件:用户在与搜索界面互动时动态应用的分面过滤条件,例如选择 brand="Adidas"、size="L" 的分面过滤条件。
规范化过滤条件 (
canonical_filter):这是一种专用过滤条件,仅供查询扩展决策模块使用。它的唯一任务是定义用于评估查询扩展触发条件(结果少于 5 个)的目录视图。
核心规范过滤函数
规范过滤器的设计目的是区分自然搜索结果不佳的情况和用户有意缩小结果范围的情况。
场景 1
-
用户体验历程:用户搜索 t-shirt,获得数千条结果。默认值为
business_filter,例如,它仅过滤有库存的商品以及与自定义商店级属性匹配的商品。然后,用户应用了 brand="Adidas" 和 size="L" 的分面过滤条件,这使得结果数量减少到两个。 - 如果
canonical_filter与filter相同:查询扩展决策系统将仅看到 2 个结果,并错误地触发查询扩展,显示相关但不相关的商品,例如 Nike T 恤,这会违背用户的明确过滤条件。 - 正确的设置是
canonical_filter = business filter:应根据初始查询(不包括用户选择的方面)来决定是否进行查询扩展。
场景 2
-
用户体验历程:用户搜索 adidas t-shirt with black graphic prints,但只获得一两个结果(如果有)。默认值为
business_filter,例如,它仅过滤有货商品和与自定义商店级属性匹配的商品。 - 如果未设置
canonical_filter或未正确配置,则使用规范过滤条件的搜索可能会找到与查询匹配但缺货或来自其他商店(即自定义商店级属性的值不同)的产品。在这种情况下,不会触发查询扩展。 -
正确的设置是
canonical_filter = business filter。查询扩展决策会发现,对于给定的长查询,商品数量少于 3 件,然后会触发查询扩展,并为原始查询带来相关商品,即有货且与商店级属性匹配的商品。这样一来,搜索结果就会扩展到包含其他品牌的黑色图案印花 T 恤、其他颜色的图案印花 T 恤,或者搜索查询中提及的品牌的其他 T 恤产品。
查询扩展最佳实践
规范过滤条件应几乎始终设置为与您的商家过滤条件或基本过滤条件相同。这样可确保查询扩展模块根据用户在开始应用过滤条件之前最初看到的相同广泛目录视图来评估查询的潜力。
端到端搜索和查询扩展流程
发出搜索请求时,会并行执行多个进程:
收到请求:API 收到包含查询内容、主要
filter和canonical_filter的搜索请求。查询扩展决策搜索:与此同时,查询扩展决策模块会使用与规范过滤条件相结合的查询执行自己的内部搜索。
结果数检查:该模块会检查其内部搜索返回的产品数量。
- 如果结果数量为 5 个或更多:系统不会触发查询扩展。标准搜索结果会进入最终过滤步骤。
- 如果结果少于 5 个:系统会触发查询扩展。模型会系统性地放宽查询条件,以查找相关商品。例如,该模型可能会查找 Pixel 5 手机、Pixel 4 手机、Pixel 耳机,甚至 Samsung 手机。
- 最终过滤:商品集(原始集或通过查询扩展获得的扩展集)会传递到最终阶段。在这种情况下,系统会严格应用包含业务规则和任何用户所选方面的顶级过滤条件。
- 发送响应:API 响应中会返回最终过滤后的商品列表。
选择性启用查询扩展功能的高级用例
您可以有策略地配置过滤条件,以针对目录的特定部分启用或停用查询扩展功能。
假设有一个包含杂货、电子产品和时尚服装的大型商品目录。对于此类场景,您需要注意以下几个方面。
目标
针对难以找到或稀缺的食品杂货查询启用查询扩展,但针对电子产品或时尚商品显示零结果。此处的业务需求是仅在“杂货”部分有选择地启用查询扩展。
配置
对于此使用情形,选择性查询扩展可以配置如下:
canonical_filter:将其设置为广泛。它应包含所有类别:食品杂货、电子产品和时尚商品,以及任何基本规则(例如库存状况,使用category="groceries" OR category="electronics" OR category="fashion") AND inStock=TRUE定义规范过滤条件)filter:根据用户的情境将其设置为窄。对于杂货部分的用户,过滤条件为category="groceries" AND inStock=TRUE。
工作原理
在此场景中,选择性查询扩展的工作方式如下:
- 用户搜索“iPhone 20”:查询扩展模块使用宽泛的 canonical_filter,找到现有的 iPhone 型号(< 5 个结果),并决定不触发查询扩展。然后,标准搜索结果(现有 iPhone)会传递给主过滤条件,但由于
category="electronics"与category="groceries"不匹配,主过滤条件会将其屏蔽。用户正确地看到零个结果。 - 用户搜索“高蛋白糖尿病牛奶”:查询扩展模块使用宽泛的
canonical_filter,但找到的结果少于 5 个,因此通过查找相关牛奶产品来触发查询扩展。这些商品会传递给主过滤条件。由于它们与category="groceries"相匹配,因此已成功退回给用户。
通过操纵 canonical_filter(决策视图)和主 filter(最终输出视图)的范围,您可以精确控制搜索体验。
示例数据集
本页以下面的数据集为例。展开该数据集,查看示例商品描述数据集中的字段。
商品数据集示例
| ID | title | brands | categories | price_info.price |
|---|---|---|---|---|
| "nest_mini_2nd_gen" | "Nest Mini (2nd gen)" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 49.00 |
| "nest_audio" | "Nest Audio" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 99.99 |
| "nest_hub_max" | "Nest Hub Max" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 229.00 |
| "nest_hub" | "Nest Hub" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 88.99 |
| "google_home_max" | "Google Home Max" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 299.00 |
| "google_home_mini" | "Google Home Mini" | ["Google", "Nest"] | ["Nest > speakers and displays"] | 49.00 |
| "google_pixel_5" | "Google Pixel 5" | ["Google", "Pixel"] | ["Pixel > phones"] | 699.00 |
| "google_pixel_4a_with_5g" | "Google Pixel 4a with 5G" | ["Google", "Pixel"] | ["Pixel > phones"] | 499.00 |
| "google_pixel_4a" | "Google Pixel 4a Phones" | ["Google", "Pixel"] | ["Pixel > phones"] | 349.00 |
| "google_pixel_stand" | "Google Pixel Stand" | ["Google", "Pixel"] | ["Pixel > featured accessories"] | 79.00 |
| "google_pixel_buds" | "Google Pixel Buds" | ["Google", "Pixel"] | ["Pixel > featured accessories"] | 179.00 |
| "google_pixel_5_case" | "Google Pixel 5 Case" | ["Google", "Pixel"] | ["Pixel > featured accessories"] | 40.00 |
| "google_pixel_4a_5g_case" | "Google Pixel 4a (5G) Case" | ["Google", "Pixel"] | ["Pixel > featured accessories"] | 40.00 |
| "google_pixel_4a_case" | "Google Pixel 4a Case" | ["Google", "Pixel"] | ["Pixel > featured accessories"] | 40.00 |
查询扩展
查询扩展会增加查询字词的召回率,但结果很少,尤其是长尾查询。
此搜索功能由确定查询扩展条件的规范驱动。它包含一个 pinUnexpandedResults 选项,该选项默认处于关闭状态。如果设置为 true,则在搜索结果顶部显示未使用扩展功能的商品。顶部是展开的搜索结果。
Java
例如,如果您在未进行查询扩展的情况下搜索 Google Pixel 5,结果将仅限于 google_pixel_5 ID。不过,通过查询扩展,您可能还会在示例商品说明数据集中获得 google_pixel_4a_with_5g、google_pixel_4a 和 google_pixel_5_case ID。