Elasticsearch 实战:亿级商品量下高性能电商搜索系统架构与实现
Elasticsearch 实战亿级商品量下高性能电商搜索系统架构与实现一、前言二、电商搜索核心需求必须满足电商搜索整体架构流程图三、第一步文档建模商品文档设计3.1 设计原则电商核心3.2 标准商品文档模型企业级四、第二步索引设计与高性能优化4.1 索引设置生产级4.2 索引优化关键点五、第三步MySQL - ES 数据同步近实时5.1 企业级同步方案**Canal Kafka ES**同步流程图5.2 同步保证六、第四步高性能查询 DSL 设计核心6.1 标准电商搜索 DSL6.2 性能关键点七、第五步必做的八大性能优化7.1 使用 filter 缓存极快7.2 禁用打分提高速度7.3 前缀匹配/自动补全7.4 聚合查询深度优化7.5 深度分页问题7.6 批量查询7.7 关闭不必要的功能7.8 集群硬件优化八、第六步高可用与稳定性保障8.1 集群架构8.2 熔断限流8.3 监控告警九、第七步用户体验增强功能9.1 搜索自动补全9.2 搜索高亮9.3 拼音搜索9.4 错别字纠错十、企业级最终性能指标可达到十一、总结电商搜索核心口诀The Begin点点关注收藏不迷路一、前言电商搜索是整个电商系统的流量入口必须满足高并发、低延迟100ms内、高可用、相关性精准、支持多维度筛选、排序、分页、高亮、推荐、自动补全等一系列复杂需求。MySQL 根本扛不住Elasticsearch 是电商搜索的工业级标准方案。本文从架构设计、文档建模、索引优化、查询优化、同步方案、高并发、稳定性等方面手把手教你搭建一套可支撑亿级商品、万级QPS的高性能电商搜索系统。全文严格遵循 CSDN 博客格式带流程图、有序号、标准标题、可直接发布、企业级实战。二、电商搜索核心需求必须满足全文检索商品标题、描述、关键词搜索精准筛选分类、品牌、价格区间、规格、库存多维度排序综合、销量、价格、评分、新品高亮展示关键词标红自动补全输入提示纠错推荐拼音、错别字纠正性能指标99% 请求 100msQPS 万级数据一致性MySQL - ES 近实时同步电商搜索整体架构流程图用户搜索请求API网关搜索服务集群Elasticsearch 集群返回结果/高亮/排序/分页MySQL商品库CanalMQ同步三、第一步文档建模商品文档设计3.1 设计原则电商核心反规范化冗余所有需要搜索/筛选/排序的字段扁平化少嵌套、少 nested字段类型精准text / keyword / 数字 / datetext keyword 双字段是标配3.2 标准商品文档模型企业级{productId:{type:keyword},// 商品ID精准title:{type:text,analyzer:ik_max_word,fields:{keyword:{type:keyword}}},// 标题categoryId:{type:keyword},// 分类IDcategoryName:{type:keyword},// 分类名brandId:{type:keyword},// 品牌IDbrandName:{type:keyword},// 品牌名price:{type:double},// 价格sales:{type:integer},// 销量stock:{type:integer},// 库存createTime:{type:date},// 上架时间status:{type:keyword},// 上架状态tags:{type:keyword},// 标签新品/热销specs:{type:keyword},// 规格颜色/尺寸shopId:{type:keyword}// 店铺ID}四、第二步索引设计与高性能优化4.1 索引设置生产级{settings:{number_of_shards:6,// 按数据量1shard≈50GBnumber_of_replicas:1,// 高可用refresh_interval:1s,// 近实时index.sort.field:[sales],// 排序预排序index.mapping.total_fields.limit:2000}}4.2 索引优化关键点合理分片36 个为主关闭不需要的字段index: false不参与搜索doc_values: false不参与排序/聚合text 字段只开必要分词禁止动态映射dynamic: strict五、第三步MySQL - ES 数据同步近实时5.1 企业级同步方案Canal Kafka ES无侵入、实时、高可用同步流程图MySQL商品表binlogCanalKafka同步服务ES批量写入5.2 同步保证异步削峰重试机制幂等性每日全量校验六、第四步高性能查询 DSL 设计核心电商搜索必须使用bool 组合查询这是 ES 高性能的关键。6.1 标准电商搜索 DSLGET /product/_search { size: 20, from: 0, _source: [productId,title,price,brandName], sort: [{sales: desc}], query: { bool: { must: [ {match: {title: 手机}} // 全文检索 ], filter: [ {term: {status: 1}}, // 上架状态 {term: {brandName: 华为}},// 品牌筛选 {range: {price: {gte: 1000, lte: 5000}}} // 价格区间 ] } }, highlight: { fields: {title: {}} } }6.2 性能关键点filter 代替 query过滤不打分性能极高must 只放全文检索term 筛选 keywordrange 筛选数字/日期_source 只返回需要字段七、第五步必做的八大性能优化7.1 使用 filter 缓存极快filter 结果自动缓存品牌、分类、状态、价格都用 filter7.2 禁用打分提高速度不需要相关性的场景使用constant_score7.3 前缀匹配/自动补全使用completion类型FST 字典树7.4 聚合查询深度优化使用global、filter聚合避免深度聚合7.5 深度分页问题小分页from size大分页search_after 游标7.6 批量查询使用mget/bulk7.7 关闭不必要的功能关闭_all关闭_field_names7.8 集群硬件优化SSD 硬盘必须堆内存 31GB数据节点 CPU 16核八、第六步高可用与稳定性保障8.1 集群架构3 个主节点612 个数据节点12 个协调节点8.2 熔断限流ES 自带断路器API 层限流8.3 监控告警CPU、堆内存、磁盘、QPS、响应时间分片异常、节点掉线九、第七步用户体验增强功能9.1 搜索自动补全suggest:{product-suggest:{prefix:hua,completion:{field:title_suggest}}}9.2 搜索高亮highlight:{pre_tags:[font colorred],post_tags:[/font],fields:{title:{}}}9.3 拼音搜索安装pinyin分词插件9.4 错别字纠错使用phrase suggester十、企业级最终性能指标可达到响应时间99% 50msQPS1万数据量亿级商品同步延迟13秒可用性99.9%十一、总结电商搜索核心口诀文档反规范化、扁平化textkeyword 双字段设计filter 做筛选must 做检索CanalMQ 实现近实时同步SSD 合理分片 堆外内存只查需要字段禁用不必要功能高可用集群 熔断限流 监控遵循这套方案你可以快速搭建工业级、高性能、稳定可靠的电商搜索系统。The End点点关注收藏不迷路