当前位置: 首页 > news >正文

用OpenSearch实现电商语义搜索

想象一下,一位顾客搜索"适合团队通话的经济型无线耳机"。传统的关键词搜索返回零结果,因为您的商品标题中并不包含所有这些确切词汇。但借助由生成式 AI 嵌入模型驱动的语义搜索,OpenSearch 能够理解用户意图——并将您最好的带降噪功能的蓝牙耳机置顶展示。

在本指南中,我们将在 OpenSearch 2.13 基础上构建一个完整的神经搜索流程:摄取电商商品数据,使用预训练的句子转换模型在摄取过程中自动生成向量嵌入,并提供具有语义感知能力的搜索结果——无需任何外部服务或付费 API。

1、为什么电商需要神经搜索?

在开始编写代码之前,让我们明确我们要解决什么问题以及业务收益是什么。

  • 减少零结果搜索:遇到死胡同的购物者会离开。语义搜索匹配同义词、改写和意图——大幅减少"无结果"页面。
  • 低于10毫秒的查询延迟:OpenSearch 的 HNSW 图索引支持近似最近邻搜索,以关键词搜索的速度提供相似性结果。
  • 更好的推荐:通过向量距离计算商品相似性,驱动"您可能也喜欢"功能——使用相同索引,无需额外基础设施。
  • 100%开源且免费:没有 OpenAI API 费用,没有供应商锁定。嵌入模型在 Apache 2.0 许可下运行在您的 OpenSearch 节点内部。

2、传统搜索 vs 神经搜索

特性
传统关键词搜索
神经语义搜索

匹配方式
精确词汇匹配
语义相似性

同义词支持
需要手动配置
自动理解

查询理解
字面匹配
理解意图

结果相关性
依赖关键词密度
基于语义相关性

3、架构设计

本文档包含架构图,展示了数据流:从商品数据摄取到向量生成再到语义搜索查询的完整流程。

4、分步实现指南

4.1 在节点上启用机器学习

默认情况下,OpenSearch 将 ML 推理限制在专用 ML 节点上。在单节点或开发环境中,告诉集群任何节点都可以运行模型:

PUT /_cluster/settings { "persistent": { "plugins.ml_commons.only_run_on_ml_node": false, "plugins.ml_commons.native_memory_threshold": 99, "plugins.ml_commons.model_auto_redeploy.enable": true, "plugins.ml_commons.model_auto_redeploy.lifetime_retry_times": 3 } }

4.2 注册嵌入模型

OpenSearch 的 ML Commons 维护一个经过预测试的 TorchScript 兼容模型注册表。我们使用 msmarco-distilbert-base-tas-b —— 一个768维的模型,针对问答段落检索进行了优化,非常适合商品搜索。

POST /_plugins/_ml/models/_register { "name": "huggingface/sentence-transformers/msmarco-distilbert-base-tas-b", "version": "1.0.2", "model_format": "TORCH_SCRIPT" } // 返回: // { "task_id": "abc123", "status": "CREATED" }

4.3 部署模型

POST /_plugins/_ml/models/<your_model_id>/_deploy // 轮询返回的 task_id 直到状态变为 COMPLETED GET /_plugins/_ml/tasks/<deploy_task_id> // 确认部署状态: GET /_plugins/_ml/models/<your_model_id> // 查找:"model_state": "DEPLOYED"

4.4 创建摄取管道

摄取管道是实现无缝批量摄取的魔法所在。流经它的每个文档都将自动将其商品描述字段转换为768维向量存储在 product_vector 字段中。

PUT /_ingest/pipeline/ecommerce-neural-pipeline { "description": "Auto-embed product descriptions for semantic search", "processors": [ { "text_embedding": { "model_id": "<your_model_id>", "field_map": { "product_description": "product_vector" // ↑ 文档中的源字段 → ↑ 新的向量字段 } } } ] }

4.5 创建电商索引

PUT /ecommerce-products { "settings": { "index.knn": true, // 在此索引上启用 k-NN "default_pipeline": "ecommerce-neural-pipeline", "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "product_id": { "type": "keyword" }, "product_name": { "type": "text" }, "product_description": { "type": "text" }, // 嵌入的源字段 "brand": { "type": "keyword" }, "category": { "type": "keyword" }, "price": { "type": "float" }, "in_stock": { "type": "boolean" }, "product_vector": { // 由管道自动填充 "type": "knn_vector", "dimension": 768, // 必须与模型输出匹配 "method": { "name": "hnsw", "space_type": "cosinesimil", "engine": "nmslib" } } } } }

4.6 准备和摄取商品数据

将商品数据准备为 OpenSearch Bulk API 格式的 JSON 文件:

{"index":{"_index":"ecommerce-products"}} { "product_id": "SKU-001", "product_name": "Plantronics HW251N SupraPlus 宽带耳机", "product_description": "专业降噪耳机,适用于办公室和呼叫中心。宽带音频提供清晰通话。QD 快速断开。单耳头戴式设计。", "brand": "Plantronics", "category": "耳机", "price": 89.99, "in_stock": true } {"index":{"_index":"ecommerce-products"}} { "product_id": "SKU-002", "product_name": "Jabra Evolve2 85 无线耳机", "product_description": "高端无线耳机,配备主动降噪功能。37小时电池续航。非常适合远程工作、视频会议和专注时段。", "brand": "Jabra", "category": "耳机", "price": 379.00, "in_stock": true }

通过 curl 摄取数据——管道会自动为每个文档执行:

# 设置 k-NN 本地库路径(WSL2 环境需要) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/softwares/opensearch-2.13.0/plugins/opensearch-knn/lib # 批量摄取 curl -XPOST -u "admin:Opensearch@2026" -k \ https://localhost:9200/_bulk \ --data-binary @products.json \ -H 'Content-Type: application/json' # 每行应显示 "result":"created", "status":201

5、执行语义搜索

数据摄取完成后,您可以使用神经搜索查询:

POST /ecommerce-products/_search { "query": { "neural": { "product_vector": { "query_text": "适合团队通话的经济型无线耳机", "model_id": "<your_model_id>", "k": 10 } } } }

即使查询中没有精确匹配的商品标题,系统也会返回语义相似的结果,如带降噪的蓝牙耳机。

6、常见问题与解决方案

6.1 内存不足错误

如果模型部署失败,增加 OpenSearch 的内存分配:

# 在 jvm.options 文件中 -Xms4g -Xmx4g

6.2 模型加载失败

确保所有 ML Commons 插件已正确安装:

# 检查已安装插件 ./opensearch-plugin list

6.3 向量维度不匹配

确保模型输出维度与索引映射中的 dimension 设置匹配。

7、结束语

通过将 OpenSearch 的 k-NN 功能与开源嵌入模型结合,您可以构建企业级的语义搜索解决方案,而无需昂贵的 API 费用或外部依赖。这种方法不仅提高了搜索相关性,还为个性化推荐和智能商品发现奠定了基础。


原文链接:用OpenSearch实现电商语义搜索 - 汇智网

http://www.jsqmd.com/news/618818/

相关文章:

  • 寻找长期合作伙伴?这份2026年GEO优化服务商深度评测指南请收好 - 品牌推荐大师1
  • 分析九号标识设计行业口碑排名,看看它的服务体验究竟如何 - 工业设备
  • Python金融数据分析深度解析:AKShare架构设计与实战应用体系
  • [Python3高阶编程] - 描述器之__set_name__
  • FastAPI子应用挂载:别再让root_path坑你一夜案
  • 信誉调查:ROHS2.0测试设备厂商客户口碑与行业评价 - 品牌推荐大师
  • AI原生研发倒逼组织重构:3大职能裂变、4类岗位消亡、5个先行企业实战路径
  • 比PPT更好用!用Mentimeter词云+投票打造高互动培训(附真实会议案例)
  • 2026 年 4 月最新幼猫离乳期喂养指南:从0到4月龄的最佳主食罐选择策略 - 科技焦点
  • 大润发购物卡线上回收的那些事:必读回收心得,让你轻松变现! - 团团收购物卡回收
  • js内建对象
  • Jetson设备密码恢复避坑指南:从镜像克隆到system.img替换的全流程解析
  • 国产品牌崛起:2026 年 4 月最新5款国产猫主食罐的技术实力与性价比对比 - 科技焦点
  • 哥本哈士奇(aspnetx)诓
  • 创新实训个人工作-初步搭建(二)
  • 思源宋体CN:7种字重免费开源字体终极指南与实战应用
  • LLM中的情感机制深度解析
  • 二分查找力扣题(leetcode)掏
  • 浏览器被劫持
  • 京东E卡回收流程详解,闲置卡变现秘籍 - 购物卡回收找京尔回收
  • 2026年SEM原位纳米压痕仪的技术架构、市场格局与专业选型指南 - 品牌推荐大师1
  • 如何构建企业级WebDAV文件服务:5种高性能部署方案详解
  • 把驱动编译进内核和驱动传递参数和内核模块导出
  • DVWA文件上传漏洞通关实录:从Low到High,手把手教你三种绕过姿势(附Burp Suite实战)
  • 2026雅思听力提分app推荐:精选高效工具助你冲刺高分 - 品牌2025
  • 基于 Helm + Argo CD 的 Kubernetes GitOps 多环境( dev/test/prod)自动化部署实践
  • 聊一聊 C# 中的闭包陷阱:foreach 循环的坑你还记得吗?夯
  • 告别粗放营销,用绿色积分搭建门店长效经营体系
  • 把用户主数据放到该放的位置,聊透 SAP NetWeaver AS ABAP 里的 User Data Synchronization
  • 二次元游戏模组管理革命:为什么你需要一个统一的启动器平台?