《微服务即使通讯中ES的作用》

在本项目中, Elasticsearch (ES) 主要用于存储 用户信息 和 聊天消息 ,其核心目的是提供 高性能的全文搜索和多维度检索能力 。

以下是详细的技术分析:

1. ES 存储了什么?

根据 data_es.hpp 中的定义,ES 维护了两个核心索引:

A.用户信息索引 ( user index)

存储了用户的基本信息字段,用于好友搜索或用户查找:

  • user_id : 用户唯一 ID (keyword)。
  • nickname : 用户昵称 (text,支持全文检索)。
  • phone : 绑定手机号 (keyword)。
  • description : 个人签名 (text,支持全文检索)。
  • avatar_id : 头像文件 ID。

B.聊天消息索引 ( message index)

存储了聊天记录的文本内容及元数据,用于历史消息搜索:

  • message_id : 消息唯一 ID。
  • user_id : 发送者 ID。
  • chat_session_id : 所属会话 ID。
  • create_time : 消息创建时间。
  • content : 消息正文内容 (text,支持关键词搜索)。

2. 为什么要用 ES 存储?

虽然 MySQL 也存储了这些数据,但引入 ES 是为了解决关系型数据库在搜索场景下的短板:

A. 强大的全文搜索能力

  • MySQL 的局限 :在 MySQL 中使用 LIKE '%关键词%' 进行模糊查询会导致 索引失效 ,触发全表扫描,在百万级以上数据量时性能极差。
  • ES 的优势 :ES 基于 倒排索引 (Inverted Index) 技术,能够秒级完成对昵称、签名或消息内容的模糊搜索,支持分词匹配(例如搜索"吃饭",能匹配到"你吃饭了吗")。

B. 复杂条件下的高性能检索

  • 在 search 方法中(见 data_es.hpp:L51-75 ),系统需要同时根据 phone 、 user_id 、 nickname 进行 should 匹配(或关系),并排除掉已有的好友 ( must_not )。这种 多字段布尔组合查询 是 ES 的强项,性能远超 MySQL 的多表关联或复杂 OR 查询。

C. 搜索结果的相关性评分

  • ES 能够根据关键词匹配度给出评分(Score),让搜索结果按"最匹配"排序。例如搜索消息时,内容完全匹配的消息会排在前面,这在 IM 系统的"搜索聊天记录"功能中体验更好。

D. 实现读写分离与架构解耦

  • 核心链路用 MySQL :注册、登录、发送消息等核心事务逻辑使用 MySQL,保证数据的一致性和可靠性。
  • 搜索链路用 ES :将耗时的搜索压力转移到专门为搜索优化的 ES 集群上,避免复杂的搜索查询拖慢数据库,提高系统的整体稳定性

总结

在注册环节写入 ES,是为了确保用户一旦注册成功,就能立即被其他用户通过搜索(昵称或手机号)找到。这是实现 IM 系统"找朋友"和"搜消息"功能的基石。

相关推荐
小王毕业啦9 小时前
2005-2024年 省级-总抚养比、儿童抚养比、老年人抚养比数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
2501_927283589 小时前
荣联汇智助力天津艺虹打造“软硬一体”智慧工厂,全流程自动化引领印刷包装行业数智变革
大数据·运维·数据仓库·人工智能·低代码·自动化
还是奇怪11 小时前
AI 提示词工程入门:用好的语言与模型高效对话
大数据·人工智能·语言模型·自然语言处理·transformer
Data_Journal12 小时前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
weixin_4462608513 小时前
城市智能化的底层基石:基于腾讯地图服务生态的移动定位与导航架构指引
大数据·人工智能·架构
qq_2837200513 小时前
Vibe Coding 氛围编程入门教程:AI 时代的全新开发范式(零基础到实战)
大数据·人工智能
Volunteer Technology14 小时前
ES并发控制
大数据·elasticsearch·搜索引擎
小飞象—木兮14 小时前
《销售数据分析标准实践手册》:核心内涵与关键指标、落地销售数据分析的全流程···(附相关材料下载)
大数据·人工智能·数据挖掘·数据分析
盟接之桥15 小时前
什么是EDI(电子数据交换)|制造业场景解决方案
大数据·网络·安全·汽车·制造
让我上个超影吧15 小时前
从Prompt工程到Harness工程:AI Agent落地的下一代软件工程范式
大数据·人工智能