技术栈
后端框架:Spring Boot(简化配置、内嵌Tomcat)、Spring MVC(请求处理)、Spring Security(权限控制)。
数据库:MySQL(关系型数据存储)、Redis(缓存热门推荐数据)。
前端技术:Thymeleaf(模板引擎)、HTML/CSS/JavaScript、Vue.js(可选,用于动态交互)。
辅助工具:Lombok(简化代码)、MyBatis/JPA(数据库操作)、Swagger(API文档)。
背景与意义
解决痛点:传统美食平台推荐精准度低、用户交互单一。通过个性化算法(如协同过滤)提升推荐效果。
价值:
- 用户端:根据历史行为(浏览、收藏)推荐匹配菜品,增强体验。
- 商家端:精准曝光目标客户,提升转化率。
- 技术实践:整合Spring Boot全栈技术,适合二次开发扩展。
核心代码示例
推荐算法逻辑(协同过滤)
// 基于用户的协同过滤 public List<Dish> recommendByUser(Long userId) { // 1. 获取目标用户的历史行为数据 List<UserBehavior> targetUserBehaviors = behaviorMapper.selectByUser(userId); // 2. 计算与其他用户的相似度(余弦相似度) Map<Long, Double> userSimilarities = new HashMap<>(); List<User> allUsers = userMapper.selectAll(); for (User otherUser : allUsers) { if (otherUser.getId().equals(userId)) continue; double similarity = calculateCosineSimilarity(targetUserBehaviors, behaviorMapper.selectByUser(otherUser.getId())); userSimilarities.put(otherUser.getId(), similarity); } // 3. 根据相似用户推荐高评分菜品 return findTopRatedDishes(userSimilarities); }接口示例(Spring MVC)
@RestController @RequestMapping("/api/recommend") public class RecommendController { @Autowired private RecommendService recommendService; @GetMapping("/user/{userId}") public ResponseEntity<List<Dish>> getUserRecommendations(@PathVariable Long userId) { return ResponseEntity.ok(recommendService.recommendByUser(userId)); } }数据库设计
主要表结构
用户表(user)
CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(100) NOT NULL, `gender` VARCHAR(10), `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP );菜品表(dish)
CREATE TABLE `dish` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `category` VARCHAR(50) COMMENT '菜系分类', `price` DECIMAL(10,2), `image_url` VARCHAR(255), `average_rating` FLOAT DEFAULT 0 );用户行为表(user_behavior)
CREATE TABLE `user_behavior` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT, `user_id` BIGINT NOT NULL, `dish_id` BIGINT NOT NULL, `behavior_type` ENUM('VIEW', 'COLLECT', 'RATE') COMMENT '浏览/收藏/评分', `rating` INT COMMENT '仅当behavior_type=RATE时有效', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), FOREIGN KEY (`dish_id`) REFERENCES `dish`(`id`) );索引优化
- 在
user_behavior(user_id, dish_id)上建立联合索引,加速查询用户历史行为。 - 对
dish(category)建立索引,支持按菜系快速筛选。
扩展方向
- 实时推荐:集成Kafka处理用户实时行为流。
- 多维度推荐:结合标签(如辣度、口味)和时空数据(用户位置)。
- 可视化:通过Echarts展示推荐结果的热力分布。