百度搜索 API 时间过滤实测:四个档位分别返回什么日期的结果
# 百度搜索 API 时间过滤实测:四个档位分别返回什么日期的结果
> 接口:百度搜索(apiCode=3351,接入点 3351-1)· 官方自营 · 按次计费
> 请求方式:POST / GET · 适用人群:做资讯、舆情、时效性问答的开发者 · 阅读时间:约 7 分钟
> **最后实测核对:2026-09-15(同查询词对照实测 4 组)**
搜"最近的大模型发布",结果里混进两年前的旧文——这是时间没设对。`search_recency_filter` 是百度搜索 API(apiCode=3351)控制时效的参数,只能填四个值:`week`、`month`、`semiyear`、`year`。
不好猜的地方在于:放宽档位会不会带回更旧的内容?实测的答案是**不会**。下面是对照数据。
## 核心要点
- 四个档位对应 7 / 30 / 180 / 365 天,是**过滤上限**,不是"必须在这个区间内"。
- 实测把档位从 `month` 放宽到 `year`,结果日期范围没有变化,只是列表内容略有差异。
- 没有自定义起止日期的能力,只能四选一。
## 四个档位的作用范围
| 枚举值 | 含义 | 文档表述 |
|--------|------|---------|
| `week` | 最近 7 天 | week:最近 7 天 |
| `month` | 最近 30 天 | month:最近 30 天 |
| `semiyear` | 最近 180 天 | semiyear:最近 180 天 |
| `year` | 最近 365 天 | year:最近 365 天 |
参数可选,不传就按默认排序返回。传枚举之外的值不会生效。
## 实测对照:档位调宽有没有用
2026-09-15 用同一个查询词 `昆明天气`,只改 `search_recency_filter`,每次返回 10 条:
| 档位 | 返回条数 | 最早发布时间 | 最新发布时间 |
|------|---------|-------------|-------------|
| 不传(默认) | 10 | 2026-08-31 18:21:00 | 2026-09-15 09:25:08 |
| `month` | 10 | 2026-09-05 21:28:53 | 2026-09-15 09:25:08 |
| `semiyear` | 10 | 2026-09-05 21:28:53 | 2026-09-15 09:25:08 |
| `year` | 10 | 2026-09-05 21:28:53 | 2026-09-15 09:25:08 |
另外用 `大模型` 这个查询词跑了一次 `week`:10 条结果全部落在 2026-09-14 到 2026-09-15 之间,跨度不到两天。
读出来的结论有三条。
**第一,档位收得紧,确实有效。** `week` 那组 10 条结果全部集中在最近两天内,比"最近 7 天"这个上限还要新。
**第二,把档位放宽不会带回更旧的内容。** `month`、`semiyear`、`year` 三组的日期范围完全一样(最早都是 09-05)。对比三组的 `url` 列表,`month` 和 `year` 有 8 条是相同的,其余是排序上的差异。也就是说,接口返回什么,主要由百度检索的排序偏好加上"只看前 10 条"决定,把时间窗口从 30 天拉到 365 天,并不会把三个月前的内容翻出来。
**第三,不传时间参数时结果反而更旧。** 默认那组里出现了 2026-08-31 的结果,跨度 15 天。所以如果你的场景要新鲜度,明确传 `week` 比不传更可靠。
这三条都是同查询词、同 `count` 下的对照结果,可以放心当成行为依据。
## 怎么用
```python
import requests
def search_recent(query: str, appkey: str, recency: str = "week") -> list:
assert recency in ("week", "month", "semiyear", "year"), "枚举值非法"
resp = requests.post(
"https://route.showapi.com/3351-1",
params={"appKey": appkey},
data={"query": query, "search_recency_filter": recency, "count": "10"},
timeout=10,
)
resp.raise_for_status()
result = resp.json()
if result.get("showapi_res_code") != 0:
raise RuntimeError(result.get("showapi_res_error"))
return (result.get("showapi_res_body") or {}).get("references") or []
```
那个 `assert` 不是多余的。档位传错不会报错,只会静默按默认行为返回,排查起来很费时间。本地先拦一道,省事。
按场景选档位:
- **舆情监控、突发新闻**:`week`。实测能收到最近两天内的内容。
- **行业动态汇总**:`month`。窗口够宽,也不至于翻出过时结论。
- **背景资料、政策梳理**:`semiyear` 或 `year`。但注意放宽档位不一定带来更老的结果,资料跨度大的话题建议直接换关键词,比如加上年份。
- **需要历史资料**:不要指望这个参数。用带年份的关键词更有效。
## 边界与坑
**没有自定义时间区间。** 你没法传"2026-01-01 到 2026-06-30"。只能四选一。要精确区间得自己拿 `date` 字段在结果里再过一遍。
**`date` 的时间粒度不统一。** 实测大量结果的时分秒是 `00:00:00`,说明源页面本身只精确到日期。所以不要做"最近 3 小时"这种过滤,会误杀本来符合条件的结果。
**档位是上限不是保证。** `week` 只保证结果不超过 7 天,不保证一定给你 7 天的内容。实测中 `week` 组的结果集中在两天内,这更像是排序偏好的结果。
**过滤会把条数打下来。** 时间档位配合域名过滤一起用,返回条数可能远少于 `count`。实测固定 `query=大模型` 加 `week` 加 `block_domain_filter=baijiahao.baidu.com`,最后只剩 1 条。相关行为在[域名过滤那篇](https://www.showapi.com/guides/baidu-search-api-domain-filter-3351)里有完整对照。
**放宽档位不等于结果更多。** 实测三档返回都是 10 条,但内容高度重叠。想扩大覆盖面,靠换关键词或多轮检索更实际。
## FAQ
**Q1:`month` 和 `year` 有什么区别?**
在本次实测里,两者返回的日期范围一致,`url` 列表有 8 条重复,其余是排序差异。放宽档位没有带回更旧的内容。
**Q2:能用这个参数查指定时间段吗?**
不能。四个枚举值只能选一个,没有起止日期参数。需要精确区间就用 `date` 字段在本地二次过滤。
**Q3:不传这个参数会怎样?**
按默认行为返回。实测默认组里出现了 15 天前的内容,比传 `week` 的结果旧。要新鲜度就明确传 `week`。
**Q4:传了非法档位值会报错吗?**
不会报错,会静默不生效。建议代码里先校验枚举值。
**Q5:`date` 是检索时间还是发布时间?**
发布时间,字符串格式 `yyyy-MM-dd HH:mm:ss`。很多源页面只精确到日期,时分秒是 0。
**Q6:为什么加了时间过滤后结果变少了?**
时间过滤和域名过滤都会减少候选,接口不会补齐到 `count` 指定的条数。
## 下一步阅读
- [百度搜索 API 域名过滤只需两个参数](https://www.showapi.com/guides/baidu-search-api-domain-filter-3351) —— 另一个会改变条数的参数
- [在 RAG 里接入百度搜索 API](https://www.showapi.com/guides/baidu-search-api-rag-agent-3351) —— 时效性检索结果怎么进模型上下文
- [百度搜索 API:用 Python 跑通第一次实时检索](https://www.showapi.com/guides/baidu-search-api-quickstart-3351) —— 还没跑通的话先看这篇
---
- **本系列共 8 篇**:查看[百度搜索 API 指南总目录](https://www.showapi.com/guides/baidu-search-guides-3351)