You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求荐基于Elasticsearch的精准商品搜索开源方案及文档预处理方法

解决方案与文档预处理建议

一、导入Elasticsearch前的文档修改

  • 拆分变体结构:将variant_ids的键值对结构转换为数组类型的variants_list,每个元素包含完整的变体属性(size、color、fit、gender、in_stock),示例:
    "variants_list": [
      {"size":30,"color":"Black","fit":"Narrow","gender":"Women","in_stock":true},
      {"size":32,"color":"Blue","fit":"Narrow","gender":"Men","in_stock":true},
      ...
    ]
    
    便于后续嵌套查询过滤变体属性。
  • 新增精确匹配字段:
    • 针对商品名称,新增name_en_exact字段,存储小写后的完整名称(如spring summer jeans),设置为keyword类型,满足精准匹配商品名称的需求。
    • 针对品牌、类别等结构化属性,确保attributes.brand、attributes.type等字段保留keyword类型的子字段(可通过ES映射设置,或预处理时新增brand_exact、type_exact字段)。
  • 新增归一化分类字段:针对词形还原/类别归组需求,新增normalized_main_category字段,提前通过规则或NLP工具处理:
    • 例如将"Chocolate milk"标记为"Milk","Milk chocolate"标记为"Chocolate",可基于自定义产品分类规则或依存分析实现。
  • 构建统一搜索字段:新增search_text字段,将name_en、attributes.brand、attributes.type、attributes.category等字段内容拼接为一段文本,用于全文搜索召回,同时保留结构化字段做精准过滤。

二、开源解决方案选型

1. 核心搜索逻辑(基于Elasticsearch原生能力)

  • 精准匹配商品:使用bool查询结合term过滤(匹配attributes.brand:Lee)和terms过滤(匹配attributes.type:Jeans),同时用match查询提升相关度。
  • 多条件过滤:在上述查询基础上,添加nested查询过滤variants_list.color:Black,可结合in_stock:true筛选在售变体。
  • 精准匹配商品名称:使用match_phrase查询name_en_exact字段,或直接用term查询该keyword类型字段,确保完全匹配。
  • 拼写纠错:使用Elasticsearch的Phrase Suggester或Term Suggester,基于search_text字段的分词结果生成纠错建议,查询时可返回候选纠正词并自动重试查询。
  • 词形还原:自定义Elasticsearch分词器,集成Snowball Token Filter实现词干提取,或结合自定义同义词过滤器处理类别归组(如将"Chocolate milk"和"Milk"映射为同一同义词组)。

2. 预处理工具(活跃维护的开源项目)

  • NLP预处理:使用spaCy或NLTK完成词形还原、依存分析,实现商品名称的类别归组(如识别"Chocolate milk"的核心类别为"Milk"),两个项目均持续维护,文档完善。
  • 批量数据处理:使用Pandas或Dask处理数十万条商品文档的批量转换,高效完成结构调整和字段新增。

3. 额外优化工具

  • 同义词管理:使用elasticsearch-synonyms工具批量生成和管理同义词规则,同步到Elasticsearch的分词器配置中。
  • 拼写纠错增强:结合Whoosh的拼写检查模块,提前为商品名称、品牌等字段生成纠错词典,导入Elasticsearch作为自定义suggester的候选词库。

内容的提问来源于stack exchange,提问作者StealthyMcStealthFace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:01:11