如何实现搜索栏输入物品时的相似内容推荐功能?
实现搜索物品的相似内容推荐方案
一、先明确核心方向与数据准备
- 先定义「相似内容」的判定维度:优先选1-2个易落地的维度切入,比如文本语义匹配+类别标签关联,别一开始就搞复杂的用户行为推荐。
- 准备基础物品数据集:至少包含物品ID、名称、类别、描述字段,用CSV就能搞定,示例格式:
item_id,item_name,category,description 1,"纯棉圆领T恤","服饰","100%新疆棉,宽松版型,多色可选" 2,"亚麻商务衬衫","服饰","透气亚麻材质,修身剪裁,适合通勤" ...
二、核心匹配逻辑:从入门到进阶
方案1:规则匹配(适合新手快速落地)
先做最基础的模糊匹配,快速跑通流程:
- 提取用户搜索关键词,先筛选同类别物品;
- 再在同类别里,匹配名称/描述含关键词的内容;
- 如果结果太少,扩大到全数据集匹配;
- 示例伪代码:
def get_similar_items(search_keyword, items_dataset): # 先筛选同类别(简化版:直接匹配关键词是否在类别中) same_category = [item for item in items_dataset if search_keyword in item['category']] # 再匹配名称/描述 matched_items = [item for item in same_category if search_keyword in item['item_name'] or search_keyword in item['description']] # 兜底:结果不足时补充全库匹配 if len(matched_items) < 5: matched_items += [item for item in items_dataset if search_keyword in item['item_name'] or search_keyword in item['description']] # 返回前10个去重后的结果 return list({item['item_id']: item for item in matched_items}.values())[:10]
方案2:语义相似度匹配(进阶提升推荐精准度)
用轻量预训练模型实现文本语义层面的相似匹配:
- 用预训练文本嵌入模型(比如
all-MiniLM-L6-v2)把物品的名称+描述转换成向量; - 用户搜索词也转成同维度向量,计算余弦相似度取TopN;
- 示例伪代码:
from sentence_transformers import SentenceTransformer, util # 加载预训练模型(本地运行无需联网,第一次会自动下载) model = SentenceTransformer('all-MiniLM-L6-v2') # 预计算所有物品的语义向量 item_texts = [f"{item['item_name']} {item['description']}" for item in items_dataset] item_embeddings = model.encode(item_texts, convert_to_tensor=True) def get_similar_items(search_keyword): query_embedding = model.encode(search_keyword, convert_to_tensor=True) # 计算搜索词与所有物品的余弦相似度 cos_scores = util.cos_sim(query_embedding, item_embeddings)[0] # 取相似度最高的前10个物品 top_indices = cos_scores.argsort(descending=True)[:10] return [items_dataset[i] for i in top_indices]
三、优化推荐效果的细节
- 加入排序权重:把销量高、评分高的相似物品排在前面,比如给相似度乘以销量权重;
- 去重处理:避免同一物品多次出现在推荐列表;
- 兜底策略:无匹配结果时,直接展示同类别热门物品。
四、从0到1落地步骤
- 先搭最小可运行版本:用规则匹配+本地CSV,写个简单的HTML搜索框,搭配Python Flask后端返回推荐结果;
- 测试验证:输入不同关键词,检查推荐结果是否符合预期;
- 逐步迭代:后续再加入语义匹配、用户浏览记录关联等功能。
内容的提问来源于stack exchange,提问作者wantingtobeawebdev
相关产品推荐
相关产品推荐

