做牙科设计的网站,h5页面制作代码,深圳市城乡和住房建设局,安徽省安徽省建设工程信息网站#x1f6cd;️ 前言#xff1a;你的搜索功能该升级了
做电商项目的兄弟们#xff0c;是不是还在苦恼这些问题#xff1f;
用户搜“红色连衣裙”#xff0c;结果搜不到标题里写着“朱砂红长裙”的商品#xff08;关键词不匹配#xff09;。用户看到一张网红同款鞋的照片…️ 前言你的搜索功能该升级了做电商项目的兄弟们是不是还在苦恼这些问题用户搜“红色连衣裙”结果搜不到标题里写着“朱砂红长裙”的商品关键词不匹配。用户看到一张网红同款鞋的照片想搜同款但不知道叫什么名字无法以图搜图。搜索结果虽然包含关键词但完全不是用户想要的东西缺乏语义理解。传统的倒排索引Inverted Index已经到了瓶颈。今天我们不需要引入新的数据库直接利用Elasticsearch 8.x的原生向量检索能力配合开源 Embedding 模型为你的系统装上“AI 的眼睛”。 核心原理万物皆可 Vector以前我们存商品存的是 text“耐克跑鞋”。现在我们存商品存的是 vector向量[0.12, -0.98, 0.55, ...]。向量检索的魔法在于语义搜索将“朱砂红长裙”和“红色连衣裙”转换成向量它们在数学空间里距离非常近所以能搜出来。以图搜图使用CLIP 模型它能把“鞋子的图片”和“鞋子的描述文字”映射到同一个向量空间。架构流程图用户请求 (文本/上传图片)Embedding 模型 (CLIP/BERT)生成向量 ([0.1, ...])商品入库模型向量化写入 ES (dense_vector)ES KNN 检索返回相似商品️ Step 1: 环境准备与 Mapping 定义首先确保你的 Elasticsearch 版本 8.0低版本虽然也能装插件但 8.x 原生性能最好。我们需要在索引中定义一个dense_vector类型的字段。PUT/products{mappings:{properties:{name:{type:text},price:{type:double},image_url:{type:keyword},product_vector:{type:dense_vector,dims:512,// 维度需与模型输出一致CLIP通常是512index:true,similarity:cosine// 使用余弦相似度计算距离}}}} Step 2: Python 脚本生成向量 (Embedding)我们使用 OpenAI 开源的CLIP 模型它最擅长处理“图文多模态”场景。安装依赖pip install sentence-transformersfromsentence_transformersimportSentenceTransformerfromelasticsearchimportElasticsearch# 1. 连接 ESesElasticsearch(http://localhost:9200,basic_auth(elastic,password))# 2. 加载 CLIP 模型 (支持多语言和图片)# clip-ViT-B-32 是一个经典的图文匹配模型modelSentenceTransformer(clip-ViT-B-32)# 3. 模拟商品数据products[{name:红色丝绒晚礼服,image:dress.jpg},{name:复古真皮马丁靴,image:boots.jpg}]# 4. 向量化并入库forpinproducts:# 这里演示文本向量化如果是图片需使用 Image.open()embeddingmodel.encode(p[name])doc{name:p[name],product_vector:embedding.tolist()# 转为 List 存入 ES}es.index(indexproducts,documentdoc)print(f商品{p[name]}已入库) Step 3: 发起 KNN 搜索现在用户输入了“参加晚宴穿的衣服”注意标题里没有这些字我们要进行语义搜索。# 用户查询user_query参加晚宴穿的衣服query_vectormodel.encode(user_query).tolist()# ES KNN 搜索 DSLsearch_body{knn:{field:product_vector,query_vector:query_vector,k:10,# 返回最相似的 10 个num_candidates:100},_source:[name,price]}reses.search(indexproducts,bodysearch_body)forhitinres[hits][hits]:print(f推荐商品:{hit[_source][name]}(相似度:{hit[_score]}))预期结果虽然用户的搜索词里没有“红”、“丝绒”、“礼服”但模型“理解”了晚宴需要穿礼服因此 ES 会高分返回“红色丝绒晚礼服”。 进阶技巧混合搜索 (Hybrid Search)在实际电商场景中向量搜索虽然懂语义但有时候不够精确比如搜具体的型号 SKU。最佳实践是关键字搜索 向量搜索 混合使用。在 ES 8.x 中这非常简单使用RRF (Reciprocal Rank Fusion)自动融合排名GET/products/_search{knn:{field:product_vector,query_vector:[0.1,...],k:10},query:{match:{name:晚礼服}},rank:{rrf:{// 倒数排名融合算法window_size:100,rank_constant:20}}} 总结通过引入 Embedding 模型和 ES 的dense_vector我们没有改动核心架构没有引入新的重型数据库就让搜索体验从“人工智障”进化到了“人工智能”。成本几乎为 0开源模型 现有 ES 集群。收益解决了长尾词搜索、语义鸿沟和跨模态搜索难题。AI 时代不要让你的搜索框还停留在 2010 年。