首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >跨境电商干货|我如何用 ElasticSearch + OpenAI Embedding 搭了个多语言搜索推荐系统

跨境电商干货|我如何用 ElasticSearch + OpenAI Embedding 搭了个多语言搜索推荐系统

原创
作者头像
Echo_Wish
发布2025-07-22 21:30:00
发布2025-07-22 21:30:00
4410
举报
文章被收录于专栏:云社区活动云社区活动

跨境电商干货|我如何用 ElasticSearch + OpenAI Embedding 搭了个多语言搜索推荐系统

🌏 引言|搜索系统的烦恼,从“语言不通”开始

大家好,我是 Echo_Wish。

我是做跨境电商平台推荐系统的一名技术人。你知道跨境电商做推荐和搜索最麻烦的是啥吗?

不是性能,不是并发,不是接口,而是:语言不通

试想一下,泰国用户搜索“เสื้อยืด”想买件T恤,美国用户搜“t-shirt”,而法国用户则用“chemise”或者“tee-shirt”。如果搜索系统只是简单的分词 + 关键词匹配,那这些用户根本找不到同一件商品。

更难的是:

  • 有的标题是多语言混杂的,比如“夏季新款 shirt เสื้อยืด 夏の新作”;
  • 用户搜索还可能是错拼、口语、模糊词,比如“white tee”、“casual short-sleeve”;
  • 产品目录每天几千上新,系统得实时处理、响应迅速。

所以我就琢磨:能不能让搜索更“懂语言”,更智能地理解查询?

于是,我搭了个系统:ElasticSearch + OpenAI Embedding,实现了多语言语义搜索 + 推荐,效果比传统搜索直接拉高了 20% 的点击率。

这篇文章,我就用大白话+代码+真实场景,跟你聊聊我是怎么一步步做这个系统的。


一、技术栈选型:为什么是 ElasticSearch + OpenAI Embedding?

传统搜索,ES 的倒排索引搞关键词检索确实效率高,但它最大的问题是不理解语义

而 OpenAI 的 text-embedding-3-small 模型,可以把任意语言的文本(不管是德语、印地语、阿拉伯语)都变成一个多维度语义向量。这样,不同语言但语义相近的内容,距离就近了。

选型对比:

技术

优点

缺点

ElasticSearch 关键词

快,成熟,开箱即用

不懂语义,多语言支持差

OpenAI Embedding

语义强,支持多语言

慢,需缓存,成本高

二者结合

关键词精准 + Embedding 模糊智能

需要架构设计合理

所以我就决定搞一个“关键词+语义”双通道的系统,前面用 ES 关键词召回,后面用 embedding 做 rerank 和推荐。


二、系统架构设计:语义补齐关键词的“盲区”

整体架构是这样的:

代码语言:txt
复制
[用户搜索词] 
   │
[输入预处理 + 语言识别]
   │
[ElasticSearch 关键词召回]────┐
                              ├──[OpenAI Embedding 二次 rerank + 补充推荐]
[搜索词 embedding]────────────┘
   ↓
[最终商品列表展示]

简单来说,就是:

  1. 先走关键词召回,兜底命中;
  2. 并行用 OpenAI 把用户搜索词转向量,在商品库里用向量近邻查找语义相近的商品,做推荐或排序优化;
  3. 多语言?embedding 自动帮你“翻译”成统一语义空间,根本不怕。

三、商品库 Embedding 构建(核心)

步骤:

  1. 商品标题 + 类目 + 标签组合成文本;
  2. 使用 OpenAI 接口调用 embedding;
  3. 存入 ES 的 dense_vector 字段。

示例代码(Python):

代码语言:python
复制
import openai
from elasticsearch import Elasticsearch

openai.api_key = "sk-xxx"

def generate_embedding(text):
    response = openai.embeddings.create(
        model="text-embedding-3-small",
        input=text
    )
    return response.data[0].embedding

es = Elasticsearch("http://localhost:9200")

product = {
    "id": "A10012",
    "title": "summer white t-shirt",
    "tags": "shirt, casual, cotton",
    "lang": "en"
}

text_for_embedding = f"{product['title']} {product['tags']}"
embedding = generate_embedding(text_for_embedding)

doc = {
    "title": product["title"],
    "tags": product["tags"],
    "embedding": embedding
}

es.index(index="products", id=product["id"], document=doc)

这样,商品就带着“语义向量”被索引了,后续就能用向量搜索查找它了。


四、用户查询的语义向量匹配(多语言通吃)

用户输入“เสื้อยืด สีขาว”(白色T恤),我们用同样的方式生成 embedding,然后在商品库里查找 embedding 最接近的商品。

向量查找 ES 查询(knn):

代码语言:json
复制
{
  "field": "embedding",
  "query_vector": [0.12, -0.34, ...],
  "k": 10,
  "num_candidates": 100
}

ES 会返回语义上最相近的商品,不管它们的标题是中文、英文还是泰文。


五、混合排序策略:关键词精准 + 语义补全

最后我们融合两个通道的召回结果:

  • 关键词命中的排前面(权重高);
  • 语义 embedding 命中的作为补充,但按相似度打分;
  • 重复商品去重;
  • 可配 AB 实验策略。

这种“混合搜索 + 语义 rerank”的方式,效果非常好:

📈实测数据

  • 平均点击率 CTR 提升 21.7%
  • 多语言用户(非英文)召回率提升 38%
  • 用户停留时间提高 12%

🔧 优化建议 & 实战坑点

  1. embedding 落库很关键,一定要缓存!别每次搜索都实时请求 OpenAI,慢且贵!
  2. 可选向量引擎(如 Milvus、FAISS)接入 ES 结果更灵活更快;
  3. 要识别语言,可用 fasttext.langdetect,避免一堆乱码;
  4. 中文/日文/阿拉伯语等短词搜索推荐效果更依赖 embedding,关键词命中弱。

💬 最后的话:多语言语义推荐,让用户“听得懂”才有转化

你有没有发现:用户并不在意你用什么模型、索引、算子。他只关心两件事:

  1. 我搜的东西,能不能准确出现?
  2. 有没有我没想到但你能推荐的东西?

我们做推荐系统,说到底是做人和人之间的“语言中介”——OpenAI Embedding 和 ElasticSearch 的组合,就像是个“通晓多国语言”的推荐助手,帮你理解用户、理解商品、让他们之间不再隔着一堵语言的墙

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 跨境电商干货|我如何用 ElasticSearch + OpenAI Embedding 搭了个多语言搜索推荐系统
    • 一、技术栈选型:为什么是 ElasticSearch + OpenAI Embedding?
      • 选型对比:
    • 二、系统架构设计:语义补齐关键词的“盲区”
    • 三、商品库 Embedding 构建(核心)
      • 步骤:
      • 示例代码(Python):
    • 四、用户查询的语义向量匹配(多语言通吃)
      • 向量查找 ES 查询(knn):
    • 五、混合排序策略:关键词精准 + 语义补全
    • 🔧 优化建议 & 实战坑点
    • 💬 最后的话:多语言语义推荐,让用户“听得懂”才有转化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档