您可以在搜索请求中指定提升条件,以提升或降低某些文档在搜索结果中的排名。当文档满足指定条件时,系统会对其应用提升值,并据此对结果进行排序。您还可以指定自定义数值和时间戳值,以便根据受欢迎程度和新鲜度等参数对结果进行排序。
搜索请求中的提升规范与附加到服务配置的提升控件不同。如需详细了解提升控件,请参阅提升控件简介。
本页面介绍以下类型的提升规范:
固定条件提升
如需根据结果是否满足某个条件来按固定量提升结果,请执行以下操作:
发送
servingConfigs.search请求时,在boostSpec字段中指定提升规范。{ "boostSpec": { "conditionBoostSpecs": { "condition": "BOOST_CONDITION", "boost": BOOST_VALUE } } }该规范包含以下参数:
BOOST_CONDITION:一个文本过滤条件表达式,用于选择要应用提升的文档。该过滤条件的求值结果必须为布尔值。BOOST_VALUE:范围在 [-1,1] 之间的浮点数。当值为负时,结果会被降权(在结果列表中位置下沉)。当值为正时,结果会被提权(在结果列表中位置上浮)。
用例示例
假设您的数据存储区包含有关酒店及其星级评分的数据。您希望提升星级评分大于或等于 3 的酒店的排名。星级评分存储在 star_rating 数值字段中。您可以在 boostSpec 中将 condition 指定为 star_rating >= 3.0,并将提升值设为 0.7,从而将所有 star_rating 在 3.0 及以上的酒店按等量提升。
{
"boostSpec": {
"conditionBoostSpecs": {
"condition": "star_rating>=3.0",
"boost": 0.7
}
}
}
使用自定义数值属性进行提升
您可以通过指定控制点及其对应的提升值,基于自定义数值属性以分段线性的方式提升结果。
如需使用自定义数值属性指定提升规范,请执行以下操作:
发送
servingConfigs.search请求时,在boostSpec字段中指定提升规范。{ "boostSpec": { "conditionBoostSpecs": { "condition": "BOOST_CONDITION", "boostControlSpec": { "attributeType": "NUMERICAL", "interpolationType": "LINEAR", "fieldName": "CUSTOM_ATTRIBUTE_FIELD_NAME", "controlPoints": [ { "attributeValue": "CUSTOM_ATTRIBUTE_VALUE_1", "boostAmount": BOOST_AMOUNT_1 }, { "attributeValue": "CUSTOM_ATTRIBUTE_VALUE_2", "boostAmount": BOOST_AMOUNT_2 } ] } } } }该规范包含以下参数:
BOOST_CONDITION:一个文本过滤条件表达式,用于选择要应用提升的文档。该过滤条件的求值结果必须为布尔值。CUSTOM_ATTRIBUTE_FIELD_NAME:自定义数值属性的字段名称,其值决定提升量。CUSTOM_ATTRIBUTE_VALUE:给定控制点的自定义属性数值,采用字符串数据类型。例如"3.3"或"12"。如需了解详情,请参阅 ControlPoint。BOOST_AMOUNT:范围在 [-1,1] 之间的浮点数。当值为负时,结果会被降权(在结果列表中位置下沉)。当值为正时,结果会被提权(在结果列表中位置上浮)。它表示映射到给定控制点的自定义属性的提升量。
当搜索结果中的文档满足指定条件时,将按如下方式应用提升量:
| 属性值 | 提升量 |
|---|---|
| 小于第一个控制点 | 等于第一个控制点的提升量 |
| 等于控制点 | 等于映射的提升量 |
| 在控制点之间 | 通过线性插值计算得出 |
| 大于最后一个控制点 | 等于最后一个控制点的提升量 |
用例示例
假设您的数据存储区包含有关酒店及其星级评分的数据。您希望根据酒店的星级评分按比例提升搜索结果。您可以按如下所示定义提升规范:
{
"boostSpec": {
"conditionBoostSpecs": {
"condition": "star_rating >= 3.0",
"boostControlSpec": {
"attributeType": "NUMERICAL",
"interpolationType": "LINEAR",
"fieldName": "star_rating",
"controlPoints": [
{
"attributeValue": "3.5",
"boostAmount": 0.25
},
{
"attributeValue": "4.0",
"boostAmount": 0.30
},
{
"attributeValue": "4.5",
"boostAmount": 0.32
}
]
}
}
}
}
在此场景中,搜索结果的提升方式如下:
| 星级 | 提升量 |
|---|---|
| 小于或等于 3.5 | 0.25 |
| 3.5 到 4.0 之间 | 0.25 到 0.30 之间,使用线性插值计算 |
| 等于 4.0 | 0.30 |
| 4.0 到 4.5 之间 | 0.30 到 0.32 之间,使用线性插值计算 |
| 大于或等于 4.5 | 0.32 |
根据新鲜度进行提升
您可以通过指定控制点及其对应的提升值,基于日期时间属性以分段线性的方式提升结果。
如需使用自定义日期时间属性指定提升规范,请执行以下操作:
发送
servingConfigs.search请求时,在boostSpec字段中指定提升规范。{ "boostSpec": { "conditionBoostSpecs": { "condition": "BOOST_CONDITION", "boostControlSpec": { "fieldName": "DATETIME_FIELD_NAME", "attributeType": "FRESHNESS", "interpolationType": "LINEAR", "controlPoints": [ { "attributeValue": "DURATION_VALUE_1", "boostAmount": BOOST_AMOUNT_1 }, { "attributeValue": "DURATION_VALUE_2", "boostAmount": BOOST_AMOUNT_2 } ] } } } }该规范包含以下参数:
BOOST_CONDITION:一个文本过滤条件表达式,用于选择要应用提升的文档。该过滤条件的求值结果必须为布尔值。DATETIME_FIELD_NAME:自定义DATETIME属性的字段名称(例如发布日期或上次更新日期),或 Google 推断的预定义属性(例如datePublished)。DURATION_VALUE:dayTimeDuration数据类型的时长值,用于确定文档的新鲜度。其计算方式是搜索执行时的日期时间与文档自定义日期时间属性的日期时间之间的时长。时长值必须按照 ISO 8601 格式以[nD][T[nH][nM][nS]]模式指定。例如,2024 年 1 月 1 日至 2024 年 3 月 1 日之间的时长可以表示为59D。同样,两天半的时长可以表示为2DT12H。如需了解详情,请参阅 ControlPoint。BOOST_AMOUNT:范围在 [-1,1] 之间的浮点数。当值为负时,结果会被降权(在结果列表中位置下沉)。当值为正时,结果会被提权(在结果列表中位置上浮)。它表示映射到给定控制点的自定义日期时间属性的提升量。
当搜索结果中的文档满足指定条件时,将按如下方式应用提升量:
| 时长值 | 提升量 |
|---|---|
| 小于第一个控制点 | 等于第一个控制点的提升量 |
| 等于给定控制点 | 等于映射的提升量 |
| 在控制点之间 | 通过线性插值计算得出 |
| 大于最后一个控制点 | 等于最后一个控制点的提升量 |
使用自定义日期时间属性的示例用例
假设您的数据存储区包含结构化数据,其中每个文档都有发布日期。您希望根据搜索结果的新鲜度按比例进行提升。您可以按如下所示定义提升规范:
{
"boostSpec": {
"conditionBoostSpecs": {
"condition": true,
"boostControlSpec": {
"fieldName": "publication_date",
"attributeType": "FRESHNESS",
"interpolationType": "LINEAR",
"controlPoints": [
{
"attributeValue": "7D",
"boostAmount": 0.40
},
{
"attributeValue": "30D",
"boostAmount": 0.37
},
{
"attributeValue": "60D",
"boostAmount": 0.32
},
{
"attributeValue": "90D",
"boostAmount": 0
}
]
}
}
}
}
在此场景中,搜索结果的提升方式如下:
| 时效性 | 提升量 |
|---|---|
| 小于或等于 7 天 | 0.40 |
| 7 到 30 天之间 | 0.40 到 0.37 之间,使用线性插值计算 |
| 等于 30 天 | 0.37 |
| 30 到 60 天之间 | 0.37 到 0.32 之间,使用线性插值计算 |
| 等于 60 天 | 0.32 |
| 60 到 90 天之间 | 0.32 到 0.0 之间,使用线性插值计算 |
| 大于或等于 90 天 | 0.0 |
利用相关性过滤条件调节提升量
除了关键字匹配、上下文匹配和相关性等影响结果排名的因素外,提升条件对结果排名的影响也非常显著。因此,您必须仔细校准提升量,尤其是在将 boostSpec 字段与相关性过滤条件搭配使用时。如需详细了解相关性过滤条件,请参阅按文档级相关性过滤搜索结果。
假设您有发布日期不同的多份文档。对于特定查询,下表显示了未实施任何提升量或相关性过滤条件时的绝对排名,并指出了文档与查询的相关性。
| 文档 | 发布日期 | 相关性 | 排名 |
|---|---|---|---|
| A | 2024 年 2 月 1 日 | 高 | #1 |
| B | 2024 年 3 月 1 日 | 高 | #2 |
| C | 2024 年 4 月 1 日 | 最低 | #3 |
| D | 2024 年 5 月 1 日 | 中 | #4 |
| E | 2024 年 6 月 1 日 | 低 | #5 |
在 2024 年 6 月 6 日,您在搜索请求中添加了以下搜索条件:
- 相关性过滤条件设置为
LOW。 - 设置提升值,使过去 31 天内发布的文档提升 0.7,发布超过一周但少于 60 天的文档提升 0.6。
在您的搜索输出中,结果首先按相关性进行过滤,然后再应用提升量。因此,应用的条件会按以下方式改变结果中页面的排名:
| 文档 | 发布日期 | 相关性 | 排名 |
|---|---|---|---|
| E | 2024 年 6 月 1 日 | 低 | #1 |
| D | 2024 年 5 月 1 日 | 中 | #2 |
| A | 2024 年 2 月 1 日 | 高 | #3 |
| B | 2024 年 3 月 1 日 | 高 | #4 |
相关性最低的结果因相关性过滤条件而被滤除。与查询相关性较低的文档因获得了较大的提升量而被排列在顶部。相关性较高的结果反而排名较低。
因此,Google 建议您从一个较小的精确提升值开始,并根据搜索输出调整该值。在此示例中,从 0.1 或更小的提升值开始可能会让更相关的结果排在顶部。