Elasticsearch:使用 inference API 进行语义搜索

本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。
重要:有关在 Elastic Stack 中执行语义搜索的最简单方法,请参阅 semantic_text 端到端教程。
在本次练习中,我们将使用 Cohere 的 embed-english-v3.0 模型。事实上,你可以使用任何 Cohere 和 OpenAI 模型,它们均受 inference API 支持。有关 HuggingFace 上可用的推荐模型列表,请参阅支持的模型列表。 你可以尝试如下的模型:
- Cohere 的 embed-english-v3.0 模型
- HuggingFace 的 all-mpnet-base-v2 模型
- OpenAI 的 text-embedding-ada-002 第二代嵌入模型
- 可通过 Azure AI Studio 或 Azure OpenAI 获得的模型
- Google Vertex AI 的 text-embedding-004 模型
- Mistral 的 mistral-embed 模型
- Amazon Bedrock 的 amazon.titan-embed-text-v1 模型
要求
你需要 Cohere 帐户才能将 inference API 与 Cohere 服务一起使用。
创建推理端点
使用 Create inference API 创建推理端点:
PUT _inference/text_embedding/cohere_embeddings /* 1 */
{"service": "cohere","service_settings": {"api_key": "<api_key>", /* 2 */ "model_id": "embed-english-v3.0", /* 3 */ "embedding_type": "byte"}
}
- 任务类型为路径中的 text_embedding,推理端点的唯一标识符 inference_id 为 cohere_embeddings。
- 你的 Cohere 帐户的 API 密钥。你可以在 Cohere 仪表板的 API 密钥部分下找到你的 API 密钥。你只需提供一次 API 密钥。Get inference API 不会返回你的 API 密钥。
- 要使用的嵌入模型的名称。你可以在此处找到 Cohere 嵌入模型的列表。
注意:使用此模型时,建议在密集向量字段映射中使用的相似度度量是点积。对于 Cohere 模型,嵌入被归一化为单位长度,在这种情况下点积和余弦度量是等效的。

从上面的请求上,我们可以看出来有一个限制 requests_per_minute 为 10000。这是因为我使用的是测试账号。
创建索引映射
必须创建目标索引的映射 - 包含模型将根据你的输入文本创建的嵌入的索引。目标索引必须具有一个字段,该字段对于大多数模型具有 dense_vector 字段类型,对于稀疏向量模型具有 sparse_vector 字段类型,就像 elser 服务的情况一样,用于索引所用模型的输出。
PUT cohere-embeddings
{"mappings": {"properties": {"content_embedding": { /* 1 */"type": "dense_vector", /* 2 */"dims": 1024, /* 3 */"element_type": "byte"},"content": { /* 4 */"type": "text" }}}
}
- 包含生成的标记的字段的名称。下一步必须在推理管道配置中引用它。
- 包含标记的字段是 dense_vector 字段。
- 模型的输出维度。在您使用的模型的 Cohere 文档中找到此值。
- 创建密集向量表示的字段的名称。在此示例中,字段的名称为 content。下一步必须在推理管道配置中引用它。
- 字段类型,在此示例中为 text。
使用推理处理器创建摄取管道
使用 inference processor 创建 ingest pipeline,并使用上面创建的模型对管道中摄取的数据进行推理。
PUT _ingest/pipeline/cohere_embeddings
{"processors": [{"inference": {"model_id": "cohere_embeddings", /* 1 */"input_output": { /* 2 */"input_field": "content","output_field": "content_embedding"}}}]
}
- 你使用 Create inference API 创建的推理端点的名称,在该步骤中称为 inference_id。
- 定义推理过程的 input_field 和将包含推理结果的 output_field 的配置对象。
加载数据
在此步骤中,你将加载稍后在推理提取管道中用于从中创建嵌入的数据。
使用 msmarco-passagetest2019-top1000 数据集,它是 MS MARCO Passage Ranking 数据集的子集。它包含 200 个查询,每个查询都附有相关文本段落列表。所有唯一段落及其 ID 都已从该数据集中提取并编译为 tsv 文件。
下载文件并使用机器学习 UI 中的 Data Visualizer 将其上传到你的集群。将名称 id 分配给第一列,将内容分配给第二列。索引名称为 test-data。上传完成后,你可以看到一个名为 test-data 的索引,其中包含 182469 个文档。
具体的步骤可以参考文章 “Elasticsearch:使用 ELSER 进行语义搜索 - sparse_vector”。
通过 inference ingest pipeline 采集数据
通过使用你选择的模型的推理管道重新索引数据,从文本中创建嵌入。此步骤使用重新索引 API 模拟通过管道采集数据。
POST _reindex?wait_for_completion=false
{"source": {"index": "test-data","size": 50 /* 1 */},"dest": {"index": "cohere-embeddings","pipeline": "cohere_embeddings"}
}
- 重新索引的默认批次大小为 1000。将大小减小到较小的数字可以加快重新索引过程的更新速度,从而使您能够密切跟踪进度并尽早发现错误。
注意:你的 Cohere 账户的速率限制可能会影响重新索引过程的吞吐量。

注意:由于我采用的是测试账号,有速率限制,在上面,我设置 max_docs 为10,也即只针对前 10个 文档进行向量化。你可以根据自己的账号来具体操作。
该调用返回一个任务 ID 来监控进度:
GET _tasks/<task_id>

上面显示我们的10个文档已经完成了向量的生成。我们可以通过如下的命令来进行查看:

如果你不想等到重新索引过程完全完成(对于大型数据集而言,这可能需要数小时),你也可以取消重新索引过程:
POST _tasks/<task_id>/_cancel
语义搜索
使用嵌入丰富数据集后,你可以使用 semantic search 查询数据。对于密集向量模型,将 query_vector_builder 传递给 k-最近邻 (kNN) 向量搜索 API,并提供查询文本和您用于创建嵌入的模型。对于像 ELSER 这样的稀疏向量模型,请使用 sparse_vector 查询,并提供查询文本和您用于创建嵌入的模型。
注意:如果你取消了重新索引过程,则你只会运行查询部分数据,这会影响结果的质量。
GET cohere-embeddings/_search
{"knn": {"field": "content_embedding","query_vector_builder": {"text_embedding": {"model_id": "cohere_embeddings","model_text": "Muscles in human body"}},"k": 10,"num_candidates": 100},"_source": ["id","content"]
}
结果,你将从 cohere-embeddings 索引中收到与查询含义最接近的前 10 个文档,这些文档按与查询的接近程度排序:
"hits": [{"_index": "cohere-embeddings","_id": "-eFWCY4BECzWLnMZuI78","_score": 0.737484,"_source": {"id": 1690948,"content": "Oxygen is supplied to the muscles via red blood cells. Red blood cells carry hemoglobin which oxygen bonds with as the hemoglobin rich blood cells pass through the blood vessels of the lungs.The now oxygen rich blood cells carry that oxygen to the cells that are demanding it, in this case skeletal muscle cells.ther ways in which muscles are supplied with oxygen include: 1 Blood flow from the heart is increased. 2 Blood flow to your muscles in increased. 3 Blood flow from nonessential organs is transported to working muscles."}},{"_index": "cohere-embeddings","_id": "HuFWCY4BECzWLnMZuI_8","_score": 0.7176013,"_source": {"id": 1692482,"content": "The thoracic cavity is separated from the abdominal cavity by the diaphragm. This is a broad flat muscle. (muscular) diaphragm The diaphragm is a muscle that separat…e the thoracic from the abdominal cavity. The pelvis is the lowest part of the abdominal cavity and it has no physical separation from it Diaphragm."}},{"_index": "cohere-embeddings","_id": "IOFWCY4BECzWLnMZuI_8","_score": 0.7154432,"_source": {"id": 1692489,"content": "Muscular Wall Separating the Abdominal and Thoracic Cavities; Thoracic Cavity of a Fetal Pig; In Mammals the Diaphragm Separates the Abdominal Cavity from the"}},{"_index": "cohere-embeddings","_id": "C-FWCY4BECzWLnMZuI_8","_score": 0.695313,"_source": {"id": 1691493,"content": "Burning, aching, tenderness and stiffness are just some descriptors of the discomfort you may feel in the muscles you exercised one to two days ago.For the most part, these sensations you experience after exercise are collectively known as delayed onset muscle soreness.urning, aching, tenderness and stiffness are just some descriptors of the discomfort you may feel in the muscles you exercised one to two days ago."}},(...)]
更多阅读 :将 Cohere 与 Elasticsearch 结合使用
相关文章:
Elasticsearch:使用 inference API 进行语义搜索
本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。 重要:有关在 Elastic Stack 中执行语义搜索的最…...
PVE开启核显直通
启用内核 IOMMU 支持 修改/etc/default/grub配置文件以启用 IOMMU 支持,将GRUB_CMDLINE_LINUX_DEFAULT修改为: GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon iommupt"iommupt的参数建议添加,以提高未直通设备 PCIe 的性能&am…...
使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍
简介 使用 AutoModelForSequenceClassification 导入Bert 模型。 很多教程都会自定义 损失函数,然后手动实现参数更新。 但本文不想手动微调,故使用 transformers 的 Trainer 自动微调。 人生苦短,我用框架,不仅可保证微调出的模…...
Obsidian git sync error / Obsidian git 同步失敗
Issue: commit due to empty commit message Solution 添加commit資訊,確保不留空白 我的設置:auto-backup: {{hostname}}/{{date}}/...
谷歌英文SEO外链如何做?
做英文SEO外链涉及多种策略和技巧,目标是提升目标网站的排名和流量,Google的搜索算法在不断演变,但外链一直是搜索引擎优化中重要的一环。有效的外链建设能够显著提升网站的SEO数据效果。关键在于创建一个多元化且自然的外链结构。不能仅仅依…...
vue使用Export2Excel导出表格
安装插件 npm install xlsx xlsx-style file-saver npm install node-polyfill-webpack-plugin (如果不安装的话后面使用会报错) 添加相关配置 在vue.config.js文件 const NodePolyfillPlugin require("node-polyfill-webpack-plugin") module.exports defineCon…...
Linux环境变量 本地变量 命令行参数
并行和并发 并行 多个进程在多个 CPU 下分别,同时进行运行。 并发 多个进程在一个 CPU 采用进程切换的方式,在一段时间内,让多个进程都得以推进,称之为并发。 CPU 中的寄存器扮演什么角色? 寄存器:cpu 内的寄存器里面保存的是进程…...
向量数据库Faiss的搭建与使用
1. 什么是Faiss? Faiss是由Facebook AI Research团队开发的一个库,旨在高效地进行大规模向量相似性搜索。它不仅支持CPU,还能利用GPU进行加速,非常适合处理大量高维数据。Faiss提供了多种索引类型,以适应不同的需求&a…...
微信小程序接入客服功能
前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…...
mysql开启远程访问
个人建议mysql可以用宝塔自动下载安装。 远程访问, 1.关闭防火墙,确保ip能ping通 2.ping端口确定数据库能ping通 3.本地先连上去命令行修改远程访问权限。 mysql -u root -p use mysql; select user,host from user; select host from user where u…...
【NLP自然语言处理】文本处理的基本方法
目录 🍔什么是分词 🍔中文分词工具jieba 2.1 jieba的基本特点 2.2 jieba的功能 2.3 jieba的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...
uniapp使用defineExpose暴露和onMounted访问
defineExpose作用 暴露方法和数据 允许从模板或其他组件访问当前组件内部的方法和数据。明确指定哪些方法和数据可以被外部访问,从而避免不必要的暴露。 增强安全性 通过显式声明哪些方法和数据可以被外部访问,防止意外修改内部状态。提高组件的安全性&a…...
怎么使用matplotlib绘制一个从-2π到2π的sin(x)的折线图-学习篇
首先:如果你的环境中没有安装matplotlib,使用以下命令可以直接安装 pip install matplotlib如何画一个这样的折线图呢?往下看 想要画一个简单的sin(x)在-2π到2π的折线图,我们要拆分成以下步骤: 先导入相关的库文…...
【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统
文章目录 一、系统架构1、后端:SpringBoot、Mybatis2、前端:Vue、ElementUI4、小程序:uniapp3、数据库:MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端:SpringBoot、Mybatis 2、前端…...
C++ | Leetcode C++题解之第390题消除游戏
题目: 题解: class Solution { public:int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step …...
echarts进度
echarts图表集 const data[{ value: 10.09,name:制梁进度, color: #86C58C,state: }, { value: 66.00,name:架梁进, color: #C6A381 ,state:正常}, { value: 33.07,name:下部进度, color: #669BDA,state:正常 }, ];// const textStyle { "color": "#CED6C8&…...
PostgreSQL16.4搭建一主一从集群
PostgreSQL搭建一主一从集群的过程主要涉及到基础环境准备、PostgreSQL安装、主从节点配置以及同步验证等步骤。以下是一个详细的搭建过程: 一、基础环境准备 创建虚拟机: 准备两台虚拟机,分别作为主节点和从节点。为每台虚拟机分配独立的IP…...
Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例
为什么要学 spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%专业角度 简化开发:降低企业开发的复杂度框架整合:高效整合其他技术,提高开发与运行效率 学什么 简化开发 IOCAOP 事务处理 框架整合 MyBatis 怎…...
深度学习|模型推理:端到端任务处理
引言 深度学习的崛起推动了人工智能领域的诸多技术突破,尤其是在处理复杂数据与任务的能力方面。模型推理作为深度学习的核心环节,决定了模型在真实应用场景中的表现。而端到端任务处理(End-to-End Task Processing)作为深度学习的一种重要范式,通过从输入到输出的直接映…...
【深度学习 Pytorch】2024年最新版本PyTorch学习指南
引言 2024年,深度学习技术在各个领域取得了显著的进展,而PyTorch作为深度学习领域的主流框架之一,凭借其易用性、灵活性和强大的社区支持,受到了广大研究者和开发者的喜爱。本文将为您带来一份2024年最新版本的PyTorch学习指南&a…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
