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

Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统

背景

在当前 AI 与搜索深度融合的时代,语义搜索已成为企业级应用的核心能力之一。作为 Elasticsearch 的国产化替代方案,Easysearch 不仅具备高性能、高可用、弹性伸缩等企业级特性,更通过灵活的插件化架构,支持多种主流 Embedding 模型服务,包括 阿里云通义千问(DashScope)本地化 Ollama 服务,实现对 OpenAI 接口规范的完美兼容。

本文将详细介绍如何在 Easysearch 中集成阿里云和 Ollama 的 Embedding API,构建端到端的语义搜索系统,并提供完整的配置示例与流程图解析。


一、为什么选择 Easysearch?

Easysearch 是由极限科技(INFINI Labs)自主研发的分布式近实时搜索型数据库,具备以下核心优势:

  • ✅ 完全兼容 Elasticsearch 7.x API 及 8.x 常用操作
  • ✅ 原生支持向量检索(kNN)、语义搜索、混合检索
  • ✅ 内置数据摄入管道与搜索管道,支持 AI 模型集成
  • ✅ 支持国产化部署、数据安全可控
  • ✅ 高性能、低延迟、可扩展性强

尤其在 AI 增强搜索场景中,Easysearch 提供了强大的 text_embeddingsemantic_query_enricher 处理器,允许无缝接入外部 Embedding 模型服务。


二、支持的 Embedding 服务

Easysearch 通过标准 OpenAI 兼容接口无缝集成各类第三方 Embedding 模型服务,理论上支持所有符合 OpenAI Embedding API 规范的模型。以下是已验证的典型服务示例:

服务类型模型示例接口协议部署方式特点
云端 SaaS阿里云 DashScopeOpenAI 兼容云端开箱即用,高可用性
OpenAI text-embedding-3OpenAI 原生云端
其他兼容 OpenAI 的云服务OpenAI 兼容云端
本地部署Ollama (nomic-embed-text等)自定义 API本地/私有化数据隐私可控
自建开源模型(如 BGE、M3E)OpenAI 兼容本地/私有化灵活定制

核心优势:

  1. 广泛兼容性
    支持任意实现 OpenAI Embedding API 格式(/v1/embeddings)的服务,包括:

    • 请求格式:{ "input": "text", "model": "model_name" }
    • 响应格式:{ "data": [{ "embedding": [...] }] }
  2. 即插即用
    仅需配置服务端点的 base_urlapi_key 即可快速接入新模型。

  3. 混合部署
    可同时配置多个云端或本地模型,根据业务需求灵活切换。


三、结合 AI 服务流程图

说明

  • 索引阶段:通过 Ingest Pipeline 调用 Embedding API,将文本转为向量并存储。
  • 搜索阶段:通过 Search Pipeline 动态生成查询向量,执行语义相似度匹配。
  • 所有 API 调用均兼容 OpenAI 接口格式,降低集成成本。

四、集成阿里云 DashScope(通义千问)

阿里云 DashScope 提供高性能文本嵌入模型 text-embedding-v4,支持 256 维向量输出,适用于中文语义理解任务。

1. 创建 Ingest Pipeline(索引时生成向量)

PUT _ingest/pipeline/text-embedding-aliyun
{"description": "阿里云用于生成文本嵌入向量的管道","processors": [{"text_embedding": {"url": "https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings","vendor": "openai","api_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","text_field": "input_text","vector_field": "text_vector","model_id": "text-embedding-v4","dims": 256,"batch_size": 5}}]
}

2. 创建索引并定义向量字段

PUT /my-index
{"mappings": {"properties": {"input_text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"text_vector": {"type": "knn_dense_float_vector","knn": {"dims": 256,"model": "lsh","similarity": "cosine","L": 99,"k": 1}}}}
}

3. 使用 Pipeline 批量写入数据

POST /_bulk?pipeline=text-embedding-aliyun&refresh=wait_for
{ "index": { "_index": "my-index", "_id": "1" } }
{ "input_text": "风急天高猿啸哀,渚清沙白鸟飞回..." }
{ "index": { "_index": "my-index", "_id": "2" } }
{ "input_text": "月落乌啼霜满天,江枫渔火对愁眠..." }
...

4. 配置 Search Pipeline(搜索时动态生成向量)

PUT /_search/pipeline/search_model_aliyun
{"request_processors": [{"semantic_query_enricher": {"tag": "tag1","description": "阿里云 search embedding model","url": "https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings","vendor": "openai","api_key": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","default_model_id": "text-embedding-v4","vector_field_model_id": {"text_vector": "text-embedding-v4"}}}]
}

5. 设置索引默认搜索管道

PUT /my-index/_settings
{"index.search.default_pipeline": "search_model_aliyun"
}

6. 执行语义搜索

GET /my-index/_search
{"_source": "input_text","query": {"semantic": {"text_vector": {"query_text": "风急天高猿啸哀,渚清沙白鸟飞回...","candidates": 10,"query_strategy": "LSH_COSINE"}}}
}
搜索结果示例:
"hits": [{"_id": "1","_score": 2.0,"_source": { "input_text": "风急天高猿啸哀..." }},{"_id": "4","_score": 1.75,"_source": { "input_text": "白日依山尽..." }},...
]

结果显示:相同诗句匹配得分最高,其他古诗按语义相似度排序,效果理想。


五、集成本地 Ollama 服务

Ollama 支持在本地运行开源 Embedding 模型(如 nomic-embed-text),适合对数据隐私要求高的场景。

1. 启动 Ollama 服务

ollama serve
ollama pull nomic-embed-text:latest

2. 创建 Ingest Pipeline(使用 Ollama)

PUT _ingest/pipeline/ollama-embedding-pipeline
{"description": "Ollama embedding 示例","processors": [{"text_embedding": {"url": "http://localhost:11434/api/embed","vendor": "ollama","text_field": "input_text","vector_field": "text_vector","model_id": "nomic-embed-text:latest"}}]
}

3. 创建 Search Pipeline(搜索时使用 Ollama)

PUT /_search/pipeline/ollama_model_pipeline
{"request_processors": [{"semantic_query_enricher": {"tag": "tag1","description": "Sets the ollama model","url": "http://localhost:11434/api/embed","vendor": "ollama","default_model_id": "nomic-embed-text:latest","vector_field_model_id": {"text_vector": "nomic-embed-text:latest"}}}]
}

后续步骤与阿里云一致:创建索引 → 写入数据 → 搜索查询。


六、安全性说明

Easysearch 在处理 API Key 时采取以下安全措施:

  • 🔐 所有 api_key 在返回时自动加密脱敏(如 TfUmLjPg...infinilabs
  • 🔒 支持密钥管理插件(如 Hashicorp Vault 集成)
  • 🛡️ 支持 HTTPS、RBAC、审计日志等企业级安全功能

确保敏感信息不被泄露,满足合规要求。


七、总结

通过 Easysearch 的 Ingest PipelineSearch Pipeline,我们可以轻松集成:

  • ✅ 阿里云 DashScope(云端高性能)
  • ✅ Ollama(本地私有化部署)
  • ✅ 其他支持 OpenAI 接口的 Embedding 服务

无论是追求性能还是数据安全,Easysearch 都能提供灵活、高效的语义搜索解决方案。


八、下一步建议

  • 尝试混合检索:结合关键词匹配与语义搜索
  • 使用 Rerank 模型提升排序精度
  • 部署多节点集群提升吞吐量
  • 接入 INFINI Gateway 实现统一 API 网关管理

参考链接

  • Easysearch 官网文档
  • 阿里云 DashScope 文档
  • Ollama 官方网站
  • INFINI Labs GitHub

关于 Easysearch

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

官网文档:https://docs.infinilabs.com/easysearch

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
原文:https://infinilabs.cn/blog/2025/Easysearch-Integration-with-Alibaba-CloudOllama-Embedding-API/

http://www.lryc.cn/news/610259.html

相关文章:

  • python与C++
  • 【测试】⾃动化测试概念篇
  • (八)嵌入式系统
  • (三)软件架构设计
  • [自动化Adapt] GUI交互(窗口/元素) | 系统配置 | 非侵入式定制化
  • 回归预测 | MATLAB实现RBF径向基神经网络多输入单输出回归预测+SHAP可解释分析
  • 【网络安全】不安全的反序列化漏洞
  • 生成式人工智能展望报告-欧盟-06-深度调研-医疗、教育、网络安全
  • 量化大型语言模型的评估
  • Word2Vec 模型原理
  • 【科研绘图系列】R语言绘制解释度条形图的热图
  • JavaScript案例(待办事项列表)
  • 项目配置文件正确但是启动失败,报配置文件内容错误或中间件地址与实际不符
  • 蓝桥杯----AT24C02
  • 在Windows 11+I7+32GB内存+RTX 3060上部署Stable Diffusion 3.5 Medium详细步骤
  • 《Python 实用项目与工具制作指南》· 3.2 实战·开发密码管理器
  • Spring AI实战:SpringBoot项目结合Spring AI开发——提示词(Prompt)技术与工程实战详解
  • 在CAPL自动化脚本中巧用panel函数
  • 贯穿全生命周期,生成式AI正在重塑游戏行业
  • Pytorch-05 所以计算图和自动微分到底是什么?(计算图及自动微分引擎原理讲解)
  • 数分思维13:AB测试
  • HTTP、WebSocket、TCP、Kafka等通讯渠道对比详解
  • C# 类型
  • Python-初学openCV——图像预处理(七)——模板匹配、霍夫变换
  • 专题:2025生命科学与生物制药全景报告:产业图谱、投资方向及策略洞察|附130+份报告PDF、原数据表汇总下载
  • idea添加gitlab访问令牌
  • Docker-07.Docker基础-数据卷挂载
  • leetcode_11 盛最多水的容器
  • C++ stdset 与 stdmultiset 深度比较
  • pathspec ‘with_def_layout‘ did not match any file(s) known to git`