挑战
传统的数据库查询无法满足搜索需求:
- 对每个供应商超过 80 个字段进行全文搜索,使用 SQL 过于缓慢
- 基于优先级的排名需要考虑数据完整性和验证情况
- 社交媒体存在需要作为一流属性进行搜索
- 模糊匹配和错别字容错对于国际供应商名称至关重要
- 类别和位置层次结构需要分面搜索功能
我们的解决方案
我们实施了自定义的 Elasticsearch 集成,通过基于优先级的索引、多字段搜索和智能排名来实现供应商发现。
架构
- 搜索引擎:Elasticsearch,带有针对供应商、类别、社交媒体的自定义映射
- 数据层:TypeORM/PostgreSQL 作为数据源,同步到 Elasticsearch
- API 层:Node.js/Express,带 Elasticsearch 客户端
- 前端:React,支持实时输入即搜
- 分析:PostHog,用于搜索行为跟踪
搜索能力
- 多字段搜索 - 同时查询供应商名称、描述、品牌、类别
- 社交媒体筛选 - 根据供应商在特定平台上的存在进行查找
- 类别分面 - 深入钻取产品类别层次结构
- 位置筛选 - 按国家、地区或城市搜索
- 优先级排名 - 已验证且数据完整的供应商排名靠前
- 模糊匹配 - 处理错别字和国际名称变体
主要特性
- 自定义索引映射 - 针对供应商、类别和社交媒体数据优化的 Schema
- 实时同步 - 数据库更改在数秒内反映到搜索结果中
- 搜索分析 - 跟踪热门查询、零结果搜索和点击率
- 批量索引 - 用于大型供应商导入的高效批量索引
- 加权评分 - 基于字段重要性可配置的相关性评分
成果
技术栈
常见问题
MicrocosmWorks 配置了 Elasticsearch,使用了自定义分析器,结合了 edge n-gram tokenization 用于部分匹配、针对行业术语的同义词词典以及用于精确零件号查找的专用关键字字段。这种方法即使买家使用的术语与供应商目录中出现的术语不同,也能返回相关的供应商。
MicrocosmWorks 设计了 Elasticsearch 集群,采用 sharding 策略,根据行业垂直领域将供应商文档分布到多个节点上,实现了无需 reindexing 的 horizontal scaling。该架构支持 cross-cluster search 以进行地理分布,即使在数百万供应商记录下,也能保持低于 200 毫秒的 query response times。
是的,MicrocosmWorks 实现了函数评分查询,根据买家定义的权重(考虑距离、最小起订量匹配度、交货时间、认证要求和过往交易历史)动态提升供应商排名。买家可以保存他们的权重配置文件,并将其应用于多次搜索,以保持一致的采购偏好。
MicrocosmWorks 构建了一个变更数据捕获 (CDC) 管道,使用 Debezium 连接到 PostgreSQL 源数据库,通过 Kafka 将供应商记录变更准实时地流式传输到 Elasticsearch。这确保了搜索结果在几秒钟内反映数据库更新,而不是等待批量重新索引周期。
MicrocosmWorks 提供基于 Elasticsearch 的搜索解决方案,费率为 $20-$45/小时。一个完整的 B2B 供应商搜索引擎,包括自定义分析器、相关性调优、分面过滤和 CDC 管道,通常需要 350-550 个开发小时。Elasticsearch 基础设施本身在 AWS 上每月约 $500 起的三节点集群上运行,具有成本效益。
