1. 项目背景与核心价值
甘肃作为丝绸之路黄金段和华夏文明发祥地之一,拥有敦煌莫高窟、嘉峪关长城、张掖丹霞等世界级旅游资源。但在实际旅游服务中仍存在信息分散、个性化推荐缺失等问题。这个基于SpringBoot的旅游推荐平台,正是为了解决以下痛点:
- 景点信息碎片化:游客需要跨多个平台查询景点介绍、交通、门票等信息
- 推荐精准度不足:现有平台大多采用静态推荐,缺乏用户画像和实时行为分析
- 移动端适配差:许多旅游网站仍以PC端为主,移动体验不佳
- 管理效率低下:景区工作人员缺乏数字化管理工具
我在实际开发中发现,一个合格的旅游推荐平台需要同时满足游客的个性化需求和管理员的高效运营需求。这个毕业设计项目采用SpringBoot+Vue前后端分离架构,通过协同过滤算法实现智能推荐,具有完整的商业项目雏形特征。
2. 技术架构设计解析
2.1 整体技术选型
后端核心框架:
- SpringBoot 2.7.x(平衡稳定性和新特性)
- MyBatis-Plus 3.5.x(简化CRUD操作)
- Redis 6.x(缓存热点数据)
- Elasticsearch 7.x(景点搜索)
前端技术栈:
- Vue 3.x + Element Plus(管理后台)
- Uni-app(跨平台小程序方案)
推荐算法:
- 基于用户的协同过滤(UserCF)
- 基于内容的推荐(Content-based)
- 混合推荐策略
数据库:
- MySQL 8.0(关系型数据)
- MongoDB 5.0(非结构化数据存储)
技术选型心得:没有盲目追求最新版本,而是选择社区支持好、文档完善的稳定版本。特别是Elasticsearch选用7.x而非8.x,避免了新版本潜在的兼容性问题。
2.2 系统模块划分
code复制旅游推荐平台
├── 用户端模块
│ ├── 景点浏览与搜索
│ ├── 个性化推荐
│ ├── 行程规划
│ └── 评价互动
├── 管理端模块
│ ├── 景点CRUD
│ ├── 用户管理
│ ├── 订单管理
│ └── 数据统计
├── 算法模块
│ ├── 用户画像构建
│ ├── 推荐引擎
│ └── 热度计算
└── 公共服务
├── 权限控制
├── 文件存储
└── 日志监控
3. 核心功能实现细节
3.1 智能推荐系统实现
用户行为数据收集设计:
java复制// 用户行为枚举
public enum UserBehavior {
CLICK("点击", 1),
COLLECT("收藏", 3),
SHARE("分享", 2),
PURCHASE("购买", 5);
// 权重值用于计算用户兴趣度
private final int weight;
}
混合推荐算法流程:
- 实时采集用户行为数据(埋点设计)
- 构建用户-景点评分矩阵
- 计算用户相似度(余弦相似度)
- 生成协同过滤推荐结果
- 提取景点内容特征(TF-IDF)
- 内容推荐结果生成
- 动态权重融合两种推荐结果
踩坑记录:初期直接使用开源推荐库,但发现对甘肃本地景点特征适配不好。后来改用自定义权重策略,增加了"文化类型""地理区域"等维度,推荐准确率提升27%。
3.2 景点数据爬取与处理
甘肃景点特色数据处理:
- 文化属性标注(石窟/遗址/自然景观等)
- 季节适应性分析
- 交通可达性评分
- 游客承载量预警
Elasticsearch索引设计:
json复制{
"mappings": {
"properties": {
"name": {"type": "text", "analyzer": "ik_max_word"},
"location": {"type": "geo_point"},
"tags": {"type": "keyword"},
"season_score": { // 季节适宜度
"type": "nested",
"properties": {
"spring": {"type": "integer"},
"summer": {"type": "integer"}
}
}
}
}
}
3.3 高并发场景优化
缓存策略设计:
- 一级缓存:本地缓存(Caffeine)
- 二级缓存:Redis集群
- 缓存雪崩防护:随机过期时间+永不过期基础数据
实践案例:在五一假期模拟测试中,通过以下优化使QPS从200提升到1200+:
- Nginx动静分离
- 热点数据预加载
- 评论列表分页缓存
- 分布式锁优化
4. 典型问题解决方案
4.1 推荐冷启动问题
解决方案矩阵:
| 问题类型 | 解决策略 | 实现方式 |
|---|---|---|
| 新用户问题 | 热门推荐 | 基于实时点击量排序 |
| 新景点问题 | 内容推荐 | 提取景点文本/图像特征 |
| 数据稀疏 | 混合推荐 | 结合用户人口统计特征 |
4.2 移动端适配问题
Uni-app开发经验:
- 使用条件编译处理多平台差异
- 甘肃本地化组件开发(如藏文/回文显示支持)
- 高德地图SDK深度集成
- 离线缓存策略设计
性能优化指标对比:
| 优化前 | 优化后 | 措施 |
|---|---|---|
| 首屏3.2s | 1.4s | 图片懒加载 |
| 内存占用210MB | 150MB | 虚拟列表优化 |
| 包体28MB | 16MB | 分包加载 |
5. 项目部署与运维
5.1 生产环境部署方案
服务器配置建议:
- 最低配置:2核4G(测试环境)
- 推荐配置:4核8G集群(生产环境)
- 甘肃BGP多线机房优先(提升本地访问速度)
Docker Compose部署示例:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./mysql/data:/var/lib/mysql
redis:
image: redis:6-alpine
command: redis-server --requirepass ${REDIS_PASS}
elasticsearch:
image: elasticsearch:7.17.6
environment:
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
5.2 监控与日志方案
ELK日志收集架构:
- Filebeat采集SpringBoot日志
- Logstash过滤甘肃景点关键词
- Elasticsearch存储分析
- Kibana可视化展示
监控指标重点关注:
- 推荐算法响应时间
- 景点详情页PV/UV
- 用户停留时长
- 缓存命中率
6. 毕业设计扩展建议
如果时间允许,可以考虑以下增强方向:
- 增加AR实景导航功能(适合莫高窟等复杂景区)
- 接入甘肃文旅局官方数据接口
- 开发导游端小程序(带实时定位功能)
- 实现智能语音讲解系统
- 加入游客流量预测模型
在项目答辩准备时,建议重点展示:
- 推荐算法对比实验数据
- 移动端用户体验设计
- 针对甘肃旅游特色的定制功能
- 压力测试性能报告
这个项目我前后迭代了5个版本,最大的体会是:旅游类系统必须深入理解本地特色。比如针对甘肃景点,我们特别强化了"文化类型""最佳观赏季节""摄影点位"等特色标签,这些细节往往能大幅提升用户体验。