ECHEMI平台商品搜索项目产品系统

我要开发同款
门先生2026年08月31日
3阅读

技术信息

语言技术
JavaElasticSearchSpringMybatisRabbitMQ
系统类型
Web
行业分类
企业服务

作品详情

行业场景

商品搜索是ECHEMI平台的核心流量入口,直接影响买家的采购效率和交易转化。平台商品数据量已达800万+,用户搜索行为涵盖精确化学名、模糊商品名、长短词组合等多种场景。原有搜索系统存在以下核心问题:

BM25长短词排序不合理:BM25算法的长度归一化机制对长文档天然不友好,长词匹配被不合理降权,精确搜索召回结果排序靠后,买家难以快速找到目标产品。

全量排序计算效率极低:800万产品全量排序分数计算加重复标记任务,原实现需耗时一周,无法支撑快速数据迭代。

搜索响应慢:模糊匹配场景下单次搜索排序平均响应时间320ms,严重影响用户体验和交易转化。

资源消耗大:全量加增量排序任务长期占用8核16G×4节点计算资源,基础设施成本居高不下。

上述问题相互关联——算法不精准导致召回质量差,性能低下拖累用户体验,资源浪费推高运营成本。项目目标即从算法、架构、资源三个维度进行系统性优化。

功能介绍

1. 商品搜索模块
功能定位:平台核心功能入口,支持买家通过商品名称、CAS号、化学式、品牌、供应商等多维度进行产品检索。
核心功能:
关键词搜索:支持中英文商品名、化学名、别名、CAS号等关键词检索
模糊匹配:支持拼写纠错、同义词扩展、前缀匹配等模糊检索能力
精确匹配:支持完整化学名称、CAS号的精确匹配,确保高精度召回
多语言支持:平台已上线英文站、中文站、德语站,搜索模块需支持多语言分词与检索

2. 排序与相关性计算模块
功能定位:基于BM25算法对搜索结果进行相关性排序,确保最相关的产品排在前面。
核心功能:
实时排序:用户搜索时实时计算每个命中文档的相关性分数并排序返回
全量排序:定时对全库800万+产品进行离线排序分数计算,用于数据质量评估和规则调优
长短词匹配优化:针对不同长度的查询词,动态调整BM25算法中的长度归一化参数,避免长词被不合理降权

3. 产品去重与标记模块
功能定位:识别并标记平台上的重复产品信息,提升搜索质量和数据整洁度。
核心功能:
重复产品识别:基于产品名称、CAS号、供应商等多维度信息进行相似度计算
重复标记:对识别出的重复产品进行标记,供前端展示和后台管理使用

4. 索引构建与更新模块
功能定位:管理Elasticsearch索引的构建、更新和增量同步。
核心功能:
全量索引构建:定期从数据库同步全量产品数据构建搜索索引
增量索引更新:产品信息变更时实时或准实时更新索引
索引版本管理:支持索引的版本回滚和灰度发布

项目实现

一、算法优化
任务:BM25长短词匹配排序逻辑优化
问题:BM25算法的长度归一化因子对长词查询天然不友好,完整化学名称等长词匹配时相关性分数被不合理压低,精确搜索结果反而不如短词模糊匹配结果靠前。
方案:使用Function Score查询,对长词匹配的文档设置加权因子进行分数补偿,提升精确匹配结果的排序位置。
成果:长短词匹配排序逻辑合理化,长词精确搜索召回准确率显著提升。

二、性能优化
1. 全量排序+重复标记性能优化
问题:800万产品全量排序分数计算加重复标记原需一周,严重影响数据迭代效率。
方案:
设计分片并行计算架构,按产品ID哈希均匀分片,多节点并行执行排序计算
引入增量更新机制,全量排序后仅对变更产品进行增量重算
成果:耗时从一周压缩至1小时内,效率提升168倍。

2.搜索响应时间优化
问题:模糊匹配场景下单次搜索排序平均响应时间320ms,超出用户体验阈值。
方案:
优化Elasticsearch查询DSL,减少不必要的script_score计算
引入查询结果缓存,高频查询词预计算排序结果
优化索引映射,高频查询字段设为keyword类型提升精确匹配效率
调整集群分片与副本策略,均衡查询负载,限定查询索引的时间范围
成果:平均响应时间从320ms降至180ms,提升44%。

三、资源优化
任务:排序任务资源开销优化
问题:全量加增量排序任务占用8核16G×4节点的计算资源。
方案:
全量排序与增量排序错峰执行,避免资源争抢
优化数据同步策略,全量数据纳入Flink流计算平台统一处理
成果:资源开销节省约38%,释放8核16G×4节点的计算资源。

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论