1. 问:你们项目的搜索建议(自动补全)功能是如何实现的?涉及哪些前后端模块?
答:
在本项目中,搜索建议功能主要体现在 web-company 子项目的搜索栏(如 SearchBar.vue)。
- 前端在用户输入关键词时,监听输入事件,调用
api/search.ts的接口获取建议词。 - 后端(如
web-server/routes/web/searchRouter.js)提供搜索建议的 API,根据用户输入的前缀在产品、新闻等集合中模糊查询匹配的标题或关键词,返回前 N 条建议。 - 前端将建议词以下拉列表形式展示,用户可直接点击补全。
2. 问:你们是如何保证搜索建议的实时性和响应速度的?
答:
- 前端实现了输入防抖(如
utils/throttleAndDebounce.ts),避免每次输入都发请求,减少后端压力。 - 后端对常用关键词、热搜词做了缓存(如 Redis),优先返回缓存结果,提升响应速度。
- 数据库查询时只返回前 N 条(如 10 条)建议,避免数据量过大。
3. 问:搜索建议的数据来源有哪些?如何保证建议的相关性?
答:
- 数据来源包括产品名称、新闻标题、历史搜索词、热门搜索词等。
- 后端在查询时优先匹配用户历史、热搜,再查全量数据,保证相关性和个性化。
- 可以根据用户的兴趣、历史行为做个性化排序(如
utils/recommender.ts)。
4. 问:你们如何处理搜索建议中的敏感词或不合法内容?
答:
- 后端在生成建议词时会过滤敏感词(如通过敏感词库比对)。
- 对于用户输入的历史词,也会做合法性校验,避免不良内容出现在建议中。
- 前端展示前也可做二次过滤,提升安全性。
5. 问:搜索建议功能如何支持多端同步和高并发?
答:
- 搜索建议 API 是无状态的,前端(PC、移动端)都可通过统一接口获取建议,实现多端同步。
- 热门建议和常用词通过缓存(如 Redis)加速,支持高并发访问。
- 对于个性化建议,结合用户 token 做分流,保证每个用户都能获得专属的建议体验。