zhibo/Zhibo/zhibo-h/消息搜索模块快速参考.md

6.1 KiB
Raw Blame History

消息搜索模块快速参考

快速上手指南 | 版本: v1.0 | 更新时间: 2024年12月26日


📋 API接口速查

1. 搜索私聊消息

GET /api/front/messages/search/private

参数:

  • keyword (必填) - 搜索关键词
  • messageType (可选) - text/image/voice/video/file
  • startTime (可选) - 开始时间
  • endTime (可选) - 结束时间
  • pageNum (可选) - 页码默认1
  • pageSize (可选) - 每页数量默认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. 验证用户身份
  2. 保存搜索历史
  3. 构建查询条件(用户必须是发送者或接收者)
  4. 关键词模糊匹配
  5. 应用过滤条件(类型、时间)
  6. 排除已删除和已撤回的消息
  7. 分页查询并返回结果

群组消息搜索

  1. 验证用户身份
  2. 获取用户所在的所有群组
  3. 保存搜索历史
  4. 构建查询条件(只搜索用户所在的群组)
  5. 关键词模糊匹配
  6. 应用过滤条件(类型、时间)
  7. 排除已删除和已撤回的消息
  8. 分页查询并返回结果

🚀 快速测试

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日
维护状态: 已完成