6.1 KiB
6.1 KiB
消息搜索模块快速参考
快速上手指南 | 版本: v1.0 | 更新时间: 2024年12月26日
📋 API接口速查
1. 搜索私聊消息
GET /api/front/messages/search/private
参数:
keyword(必填) - 搜索关键词messageType(可选) - text/image/voice/video/filestartTime(可选) - 开始时间endTime(可选) - 结束时间pageNum(可选) - 页码,默认1pageSize(可选) - 每页数量,默认20
2. 搜索群组消息
GET /api/front/messages/search/group
参数: 同上
3. 在会话中搜索
GET /api/front/messages/search/conversation/{conversationId}
参数: 同搜索私聊消息
4. 在群组中搜索
GET /api/front/messages/search/group/{groupId}
参数: 同搜索私聊消息
5. 获取搜索历史
GET /api/front/messages/search/history?limit=10
6. 清除搜索历史
DELETE /api/front/messages/search/history
🔧 核心类说明
Controller层
MessageSearchController
- 路径:
crmeb-front/src/main/java/com/zbkj/front/controller/MessageSearchController.java - 功能: 提供搜索API接口
Service层
MessageSearchService
- 路径:
crmeb-service/src/main/java/com/zbkj/service/service/MessageSearchService.java - 功能: 搜索服务接口定义
MessageSearchServiceImpl
- 路径:
crmeb-service/src/main/java/com/zbkj/service/service/impl/MessageSearchServiceImpl.java - 功能: 搜索服务实现
💡 使用示例
示例1:搜索私聊消息
curl -X GET "http://localhost:8080/api/front/messages/search/private?keyword=你好&pageNum=1&pageSize=20" \
-H "Authorization: Bearer YOUR_TOKEN"
示例2:搜索群组消息(带时间过滤)
curl -X GET "http://localhost:8080/api/front/messages/search/group?keyword=测试&startTime=2024-12-01%2000:00:00&endTime=2024-12-26%2023:59:59" \
-H "Authorization: Bearer YOUR_TOKEN"
示例3:搜索图片消息
curl -X GET "http://localhost:8080/api/front/messages/search/private?keyword=&messageType=image" \
-H "Authorization: Bearer YOUR_TOKEN"
🎯 核心功能
搜索功能
- ✅ 私聊消息搜索(全局)
- ✅ 群组消息搜索(全局)
- ✅ 会话内搜索(精确)
- ✅ 群组内搜索(精确)
- ✅ 按关键词模糊查询
- ✅ 按消息类型过滤
- ✅ 按时间范围过滤
- ✅ 分页查询
搜索历史
- ✅ 自动保存搜索历史
- ✅ 获取搜索历史列表
- ✅ 清除搜索历史
- ✅ Redis存储(30天过期)
- ✅ 最多保存20条
权限验证
- ✅ 验证用户身份
- ✅ 验证会话权限
- ✅ 验证群组成员身份
- ✅ 排除已删除的消息
- ✅ 排除已撤回的消息
📊 技术特点
1. 标准三层架构
Controller → Service → DAO → Database
2. MyBatis-Plus查询
- 无需编写SQL语句
- 使用LambdaQueryWrapper构建查询
- 类型安全,避免拼写错误
3. Redis搜索历史
- 使用ZSet按时间排序
- 自动过期(30天)
- 限制数量(最多20条)
4. 性能优化
- 分页查询,避免大量数据加载
- 使用数据库索引加速查询
- Redis缓存搜索历史
⚠️ 注意事项
1. 权限控制
- 用户只能搜索自己相关的消息
- 非会话成员无法搜索会话消息
- 非群组成员无法搜索群组消息
2. 数据过滤
- 自动排除已删除的消息
- 自动排除已撤回的消息
- 支持按消息类型过滤
3. 搜索历史
- 自动保存搜索关键词
- 30天自动过期
- 最多保存20条
4. 性能考虑
- 使用LIKE模糊查询(适合单机部署)
- 未来可升级为Elasticsearch(支持更大规模)
- 建议添加数据库索引(conversation_id、group_id、create_time)
🔍 搜索逻辑
私聊消息搜索
- 验证用户身份
- 保存搜索历史
- 构建查询条件(用户必须是发送者或接收者)
- 关键词模糊匹配
- 应用过滤条件(类型、时间)
- 排除已删除和已撤回的消息
- 分页查询并返回结果
群组消息搜索
- 验证用户身份
- 获取用户所在的所有群组
- 保存搜索历史
- 构建查询条件(只搜索用户所在的群组)
- 关键词模糊匹配
- 应用过滤条件(类型、时间)
- 排除已删除和已撤回的消息
- 分页查询并返回结果
🚀 快速测试
1. 测试搜索私聊消息
# 搜索包含"你好"的消息
curl -X GET "http://localhost:8080/api/front/messages/search/private?keyword=你好" \
-H "Authorization: Bearer YOUR_TOKEN"
2. 测试搜索群组消息
# 搜索包含"测试"的群组消息
curl -X GET "http://localhost:8080/api/front/messages/search/group?keyword=测试" \
-H "Authorization: Bearer YOUR_TOKEN"
3. 测试获取搜索历史
curl -X GET "http://localhost:8080/api/front/messages/search/history?limit=10" \
-H "Authorization: Bearer YOUR_TOKEN"
4. 测试清除搜索历史
curl -X DELETE "http://localhost:8080/api/front/messages/search/history" \
-H "Authorization: Bearer YOUR_TOKEN"
📝 常见问题
Q1: 搜索结果为空?
可能原因:
- 关键词不匹配
- 消息已被删除或撤回
- 用户不是会话或群组成员
- 时间范围过滤过于严格
解决方法:
- 检查关键词是否正确
- 检查时间范围是否合理
- 确认用户权限
Q2: 搜索速度慢?
可能原因:
- 数据量过大
- 缺少数据库索引
- 查询条件过于宽泛
解决方法:
- 添加数据库索引
- 使用时间范围过滤
- 考虑升级为Elasticsearch
Q3: 搜索历史不显示?
可能原因:
- Redis连接失败
- 搜索历史已过期
- 搜索历史已清除
解决方法:
- 检查Redis连接
- 重新搜索以保存历史
- 确认搜索历史未被清除
📚 相关文档
- 完成总结:
消息搜索模块完成总结.md - 开发指南:
直播IM系统开发指南.md
文档版本: v1.0
最后更新: 2024年12月26日
维护状态: ✅ 已完成