Elasticsearch:Jina Reranker v3

现代搜索pipelines 很少直接从检索中返回最终答案。即使你的 search 系统由高质量的索引或语义检索方法驱动,前几名结果中仍可能包含相关但不一定是最佳答案的候选内容。

这就是 reranking 变得至关重要的原因。

Reranker 会接收一个 query 和一组候选段落,将它们一起阅读,并生成一个新的排序,反映更深层次的语义相关性。它不是孤立地对 documents 打分,而是相互比较,确定哪些段落最直接回答用户的意图。

在本教程中,我们重点介绍如何在 Elasticsearch 内使用 Jina Reranker v3。我们的目标很简单:给定一个 query 和一组 documents,展示 Elasticsearch 如何调用 jina-reranker-v3。

所有操作都在 Dev Tools → Console 中进行,使用 Elasticsearch 的 open Inference API。

步骤 1 — 在 Elasticsearch 中注册 jina-reranker-v3

Elasticsearch 通过 Inference API 与外部 AI models 集成。要使用 jina-reranker-v3,我们需要定义一个 inference endpoint 并提供 Jina API key。你可以在官网找到你的 API key。

PUT _inference/rerank/jina_rerank_v3 { "service": "jinaai", "service_settings": { "api_key": "YOUR_JINA_API_KEY", "model_id": "jina-reranker-v3" }, "task_settings": { "top_n": 10, "return_documents": true } }

当此操作成功完成后,Elasticsearch 就可以将文本和 documents 直接发送到 Jina model,并接收 reranked 结果。

步骤 2 — 为演示索引一些 documents

(任何文本语料库都可以——我们只需要将 documents 存储在 Elasticsearch 中,以便传递给 reranker。)

这里我们索引了一个小型多语言文学数据集。没有 embedding 逻辑,也没有 vector 字段——我们故意保持索引简单:

POST _inference/rerank/jina_rerank_v3 { "input": [ "Pain can lead a person back to truth, for suffering often reveals what comfort hides.", "Страдание возвращает человека к истине, ведь в муке открывается то, что скрыто в покое.", "La souffrance rapproche de la vérité, car elle met à nu ce que le calme dissimule.", "Das Leiden führt den Menschen zur Wahrheit, denn im Schmerz zeigt sich, was die Ruhe verbirgt." ], "query": "How does suffering reveal hidden truth?", "return_documents": true, "top_n": 4 }

_inference/rerankAPI 需要一个 query 字符串和一个候选 documents 的 input 数组。input 中的每个元素都是需要排序的纯文本段落。响应返回一个 rerank 数组,每个条目包含文档的原始索引、语义相关性分数,以及可选的文档文本。

如果一切正常,你应该会看到如下结果:

{ "rerank": [ { "index": 2, "relevance_score": 0.31203735, "text": "La souffrance rapproche de la vérité, car elle met à nu ce que le calme dissimule." }, { "index": 0, "relevance_score": 0.2740799, "text": "Pain can lead a person back to truth, for suffering often reveals what comfort hides." }, { "index": 3, "relevance_score": 0.2597439, "text": "Das Leiden führt den Menschen zur Wahrheit, denn im Schmerz zeigt sich, was die Ruhe verbirgt." }, { "index": 1, "relevance_score": 0.24595186, "text": "Страдание возвращает человека к истине, ведь в муке открывается то, что скрыто в покое." } ] }

从概念上讲,这就是 reranker 的全部功能:给定一个 query 和一小组候选文本,它会决定哪些最相关,并按顺序返回。它不关心这些候选文本是如何获得的——无论是来自 BM25、vector search、filters 还是人工挑选列表——因此你几乎可以将它集成到任何现有的 search 流程中。

2.1 创建 embedding model endpoint

该 endpoint 允许 Elasticsearch 将文本发送到 jina-embeddings-v3,并存储返回的 vectors。

PUT _inference/text_embedding/jina_embeddings { "service": "jinaai", "service_settings": { "api_key": "YOUR_JINA_API_KEY", "model_id": "jina-embeddings-v3" } }

如果运行成功,你应该会看到 200 OK 的确认信息。

2.2 创建 reranker model endpoint

接下来,我们注册 jina-reranker-v3 endpoint。

PUT _inference/rerank/jina_rerank_v3 { "service": "jinaai", "service_settings": { "api_key": "jina_8dc23ecb303841b6880bebf0b89860ef7OkZrj9jFBpRR13AC1hwZmBKgP6n", "model_id": "jina-reranker-v3" }, "task_settings": { "top_n": 10, "return_documents": true } }

步骤 3 — 创建包含文本和 vector 字段的索引

现在我们将创建一个包含以下内容的小型索引:

  • metadata(id、lang、title)
  • 文档文本(content)
  • 由 Jina embedding endpoint 生成的 dense vector(embedding)

运行:

PUT multilingual-rerank-demo { "mappings": { "properties": { "id": { "type": "keyword" }, "lang": { "type": "keyword" }, "title": { "type": "text" }, "content": { "type": "text" }, "embedding": { "type": "dense_vector", "dims": 1024, "index": true, "similarity": "cosine" } } } }

jina-embeddings-v3 可以生成多种尺寸的 vectors,但在本教程中,我们使用 1024 维,因为它提供最强的检索准确性,并且与模型的默认配置一致,让我们可以专注于 search 流程,而不是调整 embedding 参数。在实际部署中,如果需要优化存储或延迟,可以选择较小的维度,例如 256 或 512,但 1024 为演示整个 pipeline 提供了清晰的基线。

步骤 4 — 添加 ingest pipeline 以自动生成 embeddings

每次索引一个 document 时,Elasticsearch 都可以调用 jina_embeddings endpoint,获取 vector 并直接存储到 embedding 字段中。

创建 pipeline:

PUT _ingest/pipeline/jina_embed_pipeline { "description": "Generate embeddings with jina-embeddings-v3", "processors": [ { "inference": { "model_id": "jina_embeddings", "input_output": { "input_field": "content", "output_field": "embedding" } } } ] }

步骤 5 — 索引一个小型多语言数据集

我们将索引四段短文本,分别使用四种语言。它们描述的是相同的概念(新兴音乐风格),便于观察 vector search 和 reranking 的表现。

确保在命令中包含 pipeline 参数:

POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "1", "lang": "en", "title": "The burden of conscience", "content": "Pain can lead a person back to truth, for suffering often reveals what comfort hides." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "2", "lang": "ru", "title": "Бремя совести", "content": "Страдание возвращает человека к истине, ведь в муке открывается то, что скрыто в покое." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "3", "lang": "fr", "title": "Le poids de la conscience", "content": "La souffrance rapproche de la vérité, car elle met à nu ce que le calme dissimule." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "4", "lang": "de", "title": "Die Last des Gewissens", "content": "Das Leiden führt den Menschen zur Wahrheit, denn im Schmerz zeigt sich, was die Ruhe verbirgt." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "5", "lang": "en", "title": "A quiet confession", "content": "A restless heart learns more in a single night of torment than in a year of peaceful silence." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "6", "lang": "it", "title": "La confessione silenziosa", "content": "Un cuore inquieto comprende in una notte di tormento ciò che non scopre in un anno di calma apparente." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "7", "lang": "en", "title": "The shadow of guilt", "content": "When guilt grows heavy, a person searches for truth not out of virtue, but out of necessity." } POST multilingual-rerank-demo/_doc?pipeline=jina_embed_pipeline { "id": "8", "lang": "ru", "title": "Тень вины", "content": "Когда вина становится невыносимой, человек ищет правду не из добродетели, а потому что иначе не может жить." }

这四段文本表达了相同的核心思想,但表述形式完全不同。对于 BM25,它们几乎没有重叠的关键词。对于 dense retrieval 和 reranking,它们形成了一个清晰的语义聚类。这个对比可以让我们清楚地看到每种检索方法的优劣,以及 reranker 如何解决仅靠 keyword search 或 vector search 无法处理的歧义。

步骤 6 — 对哲学性查询比较 BM25 和 vector search

现在索引已填充,我们可以观察经典 keyword search 和 dense retrieval 在更抽象问题上的表现。

假设用户提出以下问题:

“How does suffering reveal hidden truth?”

我们将首先在 content 字段上运行仅使用 BM25 的查询:

POST multilingual-rerank-demo/_search { "query": { "match": { "content": "How does suffering reveal hidden truth?" } }, "_source": ["id", "lang", "title", "content"] }

BM25 会关注字面重叠:“suffering”、“truth”,也可能是“hidden”。根据 Elasticsearch 如何对这些词进行分词和翻译,它可能返回合理的结果,但对精确词语和文档语言非常敏感。Russian 或 Italian 文本可能排名较低,仅仅因为它们与 English 查询没有共享 token,即使它们表达的是相同的想法。

为了对比,我们使用 jina-embeddings-v3 运行 vector search。首先,我们向 embedding endpoint 请求查询的 search embedding:

POST _inference/text_embedding/jina_embeddings { "input": ["How does suffering reveal hidden truth?"], "input_type": "search" }

这会返回一个 1024 维的 vector。将响应中的 embedding 数组复制,并将其填入 kNN search:

POST multilingual-rerank-demo/_search { "knn": { "field": "embedding", "query_vector": [YOUR EMBEDDINGS], "k": 10, "num_candidates": 100 }, "_source": ["id", "lang", "title", "content"] }

现在模型可以忽略字面措辞,专注于语义接近度。任何语言中讨论 suffering、truth、conscience 和 inner struggle 的文档往往会排在前面。这已经比 BM25 显得“更智能”,但请注意,排序仍然由每个文档的单一相似度分数驱动:它不会考虑文档之间的关系,也不会判断哪一条是多个合理答案中最好的。

这正是 reranking 要解决的问题。

步骤 7 — 使用 Reciprocal Rank Fusion (RRF) 构建 hybrid retriever

在实际应用中,我们很少仅在 BM25 和 vector search 之间选择;我们希望两者兼顾。Elasticsearch 提供了一个 RRF retriever,可以将多种检索策略合并成一个单一的 ranked list,使用 reciprocal rank fusion。

无需编写两个独立查询并手动合并结果,我们可以在一次_search调用中使用 retriever 语法表达 hybrid search。

首先,再次获取 query embedding(如步骤 6)。然后将 vector 填入以下请求:

POST multilingual-rerank-demo/_search { "retriever": { "rrf": { "retrievers": [ { "standard": { "query": { "match": { "content": "How does suffering reveal hidden truth?" } } } }, { "knn": { "field": "embedding", "query_vector": [0.0123, -0.0456, ... , 0.0089], "k": 20, "num_candidates": 100 } } ], "rank_window_size": 50, "rank_constant": 20 } }, "_source": ["id", "lang", "title", "content"] }

你通常会看到多语言混合出现在前几名:English、Russian、German、Italian,这取决于 “suffering”、“truth” 和 “conscience” 在 embeddings 和文本中的表示方式。这个 hybrid 列表就是我们将传递给 reranker 的候选集合。

步骤 8 — 将 Jina Reranker v3 添加为最终排序层

目前,hybrid search 仍然为每个文档生成单一分数,没有 “这段不错,但那段是最优答案” 的概念。Reranker 正是用来做这种判断的。

Elasticsearch 将其暴露为text_similarity_rerankerretriever,它会包装另一个 retriever(这里是我们的 RRF hybrid retriever),并将其 top hits 发送到 rerank inference endpoint。

因为我们已经将 jina_rerank_v3 注册为 rerank endpoint,现在可以写:

POST multilingual-rerank-demo/_search { "retriever": { "text_similarity_reranker": { "retriever": { "rrf": { "retrievers": [ { "standard": { "query": { "match": { "content": "How does suffering reveal hidden truth?" } } } }, { "knn": { "field": "embedding", "query_vector": [0.0123, -0.0456, ... , 0.0089], "k": 20, "num_candidates": 100 } } ], "rank_window_size": 50, "rank_constant": 20 } }, "field": "content", "inference_id": "jina_rerank_v3", "inference_text": "How does suffering reveal hidden truth?", "rank_window_size": 20 } }, "_source": ["id", "lang", "title", "content"] }

当我们运行不带 reranking 的 hybrid RRF search 时,English 文本 “Pain can lead a person back to truth, for suffering often reveals what comfort hides” 排在最前面,其次是 English 的 “shadow of guilt” 句子,然后是 Russian 和 French 版本。这很合理:查询是 English,因此 BM25 强烈偏向包含字面词汇(如 “suffering” 和 “truth”)的 English 文档,而 vector retriever 会拉入其他语言的文档,但无法完全控制最终排序。

一旦将 jina-reranker-v3 作为第二阶段,排序就会变得更有针对性。Reranker 会将四条 “suffering reveals truth” 的句子 —— French、German、Russian 和 English —— 移动到列表顶部,并将更偏题的 “guilt and necessity” 段落排到后面。模型不是简单地融合 lexical 和 vector 分数,而是将 query 和候选段落一起阅读在同一上下文中,然后判断哪些最直接回答问题。最终结果是多语言、语义一致,并且明显优化了用户意图,而不是单纯依赖各自的评分启发式。

原文:https://www.elastic.co/search-labs/tutorials/jina-tutorial/jina-reranker-v3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1153069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI如何帮你快速生成PyQt5桌面应用?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个PyQt5桌面应用程序,实现一个简单的文本编辑器功能。要求包含以下功能:1. 顶部菜单栏(文件、编辑、帮助)2. 文本编辑区域支…

WPF在企业ERP系统开发中的实战应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业ERP系统的WPF客户端,包含以下模块:1)员工管理(增删改查、部门分配);2)库存管理(商品入库、出库记录);3)订单处理(创建订…

AI人脸隐私卫士如何应对帽子/眼镜?配件干扰测试

AI人脸隐私卫士如何应对帽子/眼镜?配件干扰测试 1. 背景与挑战:当人脸戴上“伪装”——配件对自动打码的影响 在现实场景中,人们佩戴帽子、墨镜、口罩、围巾等配饰是常态。这些物品不仅改变了面部的视觉特征,还可能遮挡关键检测…

UUID生成为何突然变慢?v6-v8版本必须关注的6大陷阱与优化方案

第一章:UUID v6-v8生成性能突变的根源剖析在现代分布式系统中,UUID 的版本演进(特别是从 v6 到 v8)引入了时间有序性与随机性之间的新平衡。然而,在高并发场景下,这些新版本 UUID 的生成性能表现出显著波动…

HunyuanVideo-Foley ONNX转换:跨框架部署的可能性验证

HunyuanVideo-Foley ONNX转换:跨框架部署的可能性验证 随着多模态生成技术的快速发展,视频与音效的智能协同生成正成为内容创作领域的重要方向。腾讯混元团队于2025年8月28日开源了端到端视频音效生成模型 HunyuanVideo-Foley,标志着AI在“声…

5分钟部署Qwen3-4B-Instruct-2507:vLLM+Chainlit打造企业级AI助手

5分钟部署Qwen3-4B-Instruct-2507:vLLMChainlit打造企业级AI助手 1. 引言:轻量大模型时代的企业AI新范式 随着生成式AI技术的快速演进,企业级AI应用正从“参数竞赛”转向“效率优先”的务实路径。阿里巴巴通义千问团队推出的 Qwen3-4B-Inst…

OneMore插件实用指南:3步掌握OneNote高效管理技巧

OneMore插件实用指南:3步掌握OneNote高效管理技巧 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore作为OneNote的专业增强插件,通过丰富…

HunyuanVideo-Foley批处理模式:一次性处理百个视频的脚本编写

HunyuanVideo-Foley批处理模式:一次性处理百个视频的脚本编写 1. 引言:从单文件到批量处理的工程挑战 1.1 HunyuanVideo-Foley 技术背景 HunyuanVideo-Foley 是腾讯混元于2025年8月28日宣布开源的一款端到端视频音效生成模型。该模型突破了传统音效制…

HunyuanVideo-Foley入门必看:新手也能轻松搞定声画同步

HunyuanVideo-Foley入门必看:新手也能轻松搞定声画同步 1. 技术背景与核心价值 随着AI生成技术的快速发展,视频内容创作正从“视觉主导”迈向“视听融合”的新阶段。传统音效制作依赖专业音频工程师手动匹配动作与声音,耗时长、成本高&…

QT新手必看:30分钟实现简易WPS编辑器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 为QT初学者设计一个简易WPS文本编辑器教学项目,要求:1. 分步骤实现,每个步骤有详细说明;2. 只包含最核心的文本编辑功能&#xff1b…

如何用AI自动生成CryptoJS加密代码?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请使用Kimi-K2模型生成一个完整的CryptoJS实现示例,要求包含以下功能:1)AES-256-CBC加密解密函数 2)SHA-256哈希计算函数 3)HMAC签名验证功能。代码需要包含…

AI打码系统安全审计:日志记录与分析

AI打码系统安全审计:日志记录与分析 1. 引言:AI人脸隐私保护的现实挑战 随着AI视觉技术在社交、安防、办公等场景的广泛应用,图像中的人脸隐私泄露风险日益凸显。一张看似普通的合照,可能包含多位用户的生物特征信息&#xff0c…

快速验证:如何用快马1小时做出视频号下载DEMO

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个视频号下载功能原型,要求:1.实现核心下载功能 2.简约的Material Design界面 3.演示用的模拟API 4.可交互的预览效果 5.关键代码注释。在1小时内完成…

智能客服实战:用Qwen3-4B快速搭建企业问答系统

智能客服实战:用Qwen3-4B快速搭建企业问答系统 1. 背景与需求:轻量级大模型在智能客服中的崛起 随着企业对客户服务效率和智能化水平的要求不断提升,传统规则驱动的客服系统已难以满足复杂多变的用户咨询场景。基于大语言模型(L…

零基础学TFTP:5分钟搭建第一个文件传输服务

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个TFTP入门教学项目,包含:1. 简易TFTP服务端(只读模式) 2. 带界面的客户端 3. 示例传输的文本/图片文件 4. 分步骤的README教程 5. 常见错误解决方案…

HunyuanVideo-Foley负载均衡:多GPU资源调度最佳实践

HunyuanVideo-Foley负载均衡:多GPU资源调度最佳实践 随着AIGC技术在音视频生成领域的深入发展,腾讯混元于2025年8月28日宣布开源其端到端视频音效生成模型——HunyuanVideo-Foley。该模型实现了从视频画面与文本描述到高质量音效的自动映射,…

AI人脸隐私卫士是否支持API调用?接口开发指南

AI人脸隐私卫士是否支持API调用?接口开发指南 1. 引言:从WebUI到API集成的演进需求 随着数据隐私保护意识的增强,AI人脸隐私卫士作为一款基于MediaPipe的本地化图像脱敏工具,已广泛应用于个人隐私保护、企业文档处理和安防影像预…

书匠策AI:课程论文的“智能建筑师”,从零搭建学术思维大厦

在学术写作的江湖里,课程论文常被视为“新手村任务”——看似简单,实则暗藏陷阱。选题太泛、逻辑混乱、文献堆砌、查重焦虑……这些问题像游戏里的“隐藏关卡”,让无数学生卡关。如今,一款名为书匠策AI的科研工具(官网…

企业级OpenStack私有云实战:从零搭建到生产环境部署

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个OpenStack私有云部署实战指南应用,包含:1. 典型企业部署场景案例库(金融/制造/教育等);2. 分步骤的部署检查清单和操作手册&#xff1b…

Elastic:DevRel 通讯 — 2026 年 1 月

作者:来自 Elastic DevRel team 来自 Elastic DevRel 团队的问候!在本期通讯中,我们介绍了首批 Elastic Jina models、免费按需培训、最新博客和视频,以及即将举办的活动。 新内容概览 Elasticsearch 和 Elastic Stack 9.2 版本带…