🌺The Begin🌺点点关注,收藏不迷路🌺

一、前言

电商搜索是整个电商系统的流量入口,必须满足:高并发、低延迟(100ms内)、高可用、相关性精准、支持多维度筛选、排序、分页、高亮、推荐、自动补全等一系列复杂需求。

MySQL 根本扛不住,Elasticsearch 是电商搜索的工业级标准方案

本文从架构设计、文档建模、索引优化、查询优化、同步方案、高并发、稳定性等方面,手把手教你搭建一套可支撑亿级商品、万级QPS的高性能电商搜索系统。

全文严格遵循 CSDN 博客格式:带流程图、有序号、标准标题、可直接发布、企业级实战


二、电商搜索核心需求(必须满足)

  1. 全文检索:商品标题、描述、关键词搜索
  2. 精准筛选:分类、品牌、价格区间、规格、库存
  3. 多维度排序:综合、销量、价格、评分、新品
  4. 高亮展示:关键词标红
  5. 自动补全:输入提示
  6. 纠错推荐:拼音、错别字纠正
  7. 性能指标:99% 请求 < 100ms,QPS 万级
  8. 数据一致性:MySQL <-> ES 近实时同步

电商搜索整体架构流程图

用户搜索请求

API网关

搜索服务集群

Elasticsearch 集群

返回结果/高亮/排序/分页

MySQL商品库

Canal+MQ同步


三、第一步:文档建模(商品文档设计)

3.1 设计原则(电商核心)

  1. 反规范化:冗余所有需要搜索/筛选/排序的字段
  2. 扁平化:少嵌套、少 nested
  3. 字段类型精准:text / keyword / 数字 / date
  4. text + keyword 双字段是标配

3.2 标准商品文档模型(企业级)

{
  "productId":        {"type": "keyword"},         // 商品ID(精准)
  "title":            {"type": "text", 
                       "analyzer": "ik_max_word",
                       "fields": {"keyword": {"type": "keyword"}}}, // 标题
  "categoryId":       {"type": "keyword"},         // 分类ID
  "categoryName":     {"type": "keyword"},         // 分类名
  "brandId":          {"type": "keyword"},         // 品牌ID
  "brandName":        {"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≈50GB
    "number_of_replicas": 1,         // 高可用
    "refresh_interval": "1s",        // 近实时
    "index.sort.field": ["sales"],   // 排序预排序
    "index.mapping.total_fields.limit": 2000
  }
}

4.2 索引优化关键点

  1. 合理分片:3~6 个为主
  2. 关闭不需要的字段
    • index: false 不参与搜索
    • doc_values: false 不参与排序/聚合
  3. text 字段只开必要分词
  4. 禁止动态映射 dynamic: strict

五、第三步:MySQL <-> ES 数据同步(近实时)

5.1 企业级同步方案:Canal + Kafka + ES

无侵入、实时、高可用

同步流程图

MySQL商品表

binlog

Canal

Kafka

同步服务

ES批量写入

5.2 同步保证

  • 异步削峰
  • 重试机制
  • 幂等性
  • 每日全量校验

六、第四步:高性能查询 DSL 设计(核心)

电商搜索必须使用 bool 组合查询,这是 ES 高性能的关键。

6.1 标准电商搜索 DSL

GET /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 性能关键点

  1. filter 代替 query:过滤不打分,性能极高
  2. must 只放全文检索
  3. term 筛选 keyword
  4. range 筛选数字/日期
  5. _source 只返回需要字段

七、第五步:必做的八大性能优化

7.1 使用 filter 缓存(极快)

  • filter 结果自动缓存
  • 品牌、分类、状态、价格都用 filter

7.2 禁用打分提高速度

不需要相关性的场景,使用 constant_score

7.3 前缀匹配/自动补全

使用 completion 类型(FST 字典树)

7.4 聚合查询深度优化

  • 使用 globalfilter 聚合
  • 避免深度聚合

7.5 深度分页问题

  • 小分页:from + size
  • 大分页:search_after + 游标

7.6 批量查询

使用 mget / bulk

7.7 关闭不必要的功能

  • 关闭 _all
  • 关闭 _field_names

7.8 集群硬件优化

  • SSD 硬盘(必须)
  • 堆内存 31GB
  • 数据节点 CPU 16核+

八、第六步:高可用与稳定性保障

8.1 集群架构

  • 3 个主节点
  • 6~12 个数据节点
  • 1~2 个协调节点

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 color='red'>"],
  "post_tags": ["</font>"],
  "fields": {"title": {}}
}

9.3 拼音搜索

安装 pinyin 分词插件

9.4 错别字纠错

使用 phrase suggester


十、企业级最终性能指标(可达到)

  • 响应时间:99% < 50ms
  • QPS:1万+
  • 数据量:亿级商品
  • 同步延迟:1~3秒
  • 可用性:99.9%

十一、总结(电商搜索核心口诀)

  1. 文档反规范化、扁平化
  2. text+keyword 双字段设计
  3. filter 做筛选,must 做检索
  4. Canal+MQ 实现近实时同步
  5. SSD + 合理分片 + 堆外内存
  6. 只查需要字段,禁用不必要功能
  7. 高可用集群 + 熔断限流 + 监控

遵循这套方案,你可以快速搭建工业级、高性能、稳定可靠的电商搜索系统。


在这里插入图片描述


🌺The End🌺点点关注,收藏不迷路🌺
Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐