Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而,有时,将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是,如何结合文本和语义搜索结果?

首先,让我们看一下对某些字段使用 multi_match 的花园品种文本查询。 这种搜索具有关键字搜索的典型陷阱,即关键字必须以某种形式存在于要返回的文档中,并且我们没有考虑用户搜索内容的上下文。

POST search-national-parks/_search
{"query": {"multi_match": {"query": "Where can I see the Northern Lights?","fields": ["title", "description"]}},"_source": ["title"]
}

现在,让我们看看 ELSER 查询本身:

POST search-national-parks/_search
{"query": {"bool": {"should": [{"text_expansion": {"ml.inference.title_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?"}}},{"text_expansion": {"ml.inference.description_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?"}}}]}},"_source": ["title"]
}

在上面,我们使用 ELSER 来对文章进行语义搜索。如果你对 ELSER 还不是很熟的话,请参阅如下的文章:

  • Elasticsearch:部署 ELSER - Elastic Learned Sparse EncoderR

  • Elasticsearch:使用 ELSER v2 文本扩展进行语义搜索

组合这两个查询的第一种方法是使用称为线性提升的策略。 在此示例中,我们正在提升文本搜索结果,以便它们具有优先级。 根据你正在运行的查询,这可能是理想的,也可能不是理想的。

POST search-national-parks/_search
{"query": {"bool": {"should": [{"text_expansion": {"ml.inference.title_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?","boost": 1}}},{"text_expansion": {"ml.inference.description_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?","boost": 1}}},{"multi_match": {"query": "Where can I see the Northern Lights?","fields": ["title","description"],"boost": 4}}]}},"_source": ["title"]
}

最后,我们还可以使用倒数排名融合(RRF)将文本搜索结果与语义结果结合起来,并对返回的搜索结果重新评分:

POST search-national-parks/_search
{"sub_searches": [{"query": {"multi_match": {"query": "Where can I see the Northern Lights?","fields": ["title","description"]}}},{"query": {"text_expansion": {"ml.inference.title_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?"}}}},{"query": {"text_expansion": {"ml.inference.description_expanded.predicted_value": {"model_id": ".elser_model_2","model_text": "Where can I see the Northern Lights?"}}}}],"rank": {"rrf": {"window_size": 10,"rank_constant": 20}},"_source": ["title", "states"]
}

这些示例应该可以帮助你开始为你的用例创建最相关的搜索结果的旅程!

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

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

相关文章

Java异常篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、 Excption与Error包结构二、Thow与thorws区别三、Error与Exception区别?四、error和exception有什么区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

1213:八皇后问题 深度优先搜索算法

1213:八皇后问题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。 【输入】 (无) 【输出】 按给定顺序和格式输出所有八皇后问题的解(见样例)。 题目…

Spring源码之依赖注入(二)

书接上文 文章目录 一. Autowire底层注入逻辑1. 属性注入逻辑 一. Autowire底层注入逻辑 前面我们分析了Spring时如何找到某个目标类的所有注入点这一个核心逻辑,但还没又对核心注入方法inject进行详细分析,下面我们就来详细分析Spring拿到所有的注入点…

【CASS精品教程】CASS11计算城镇建筑密度

CASS中可以很方便计算建筑密度。 文章目录 一、建筑密度介绍二、CASS计算建筑密度1. 绘制宗地范围2. 绘制建筑物3. 计算建筑密度三、注意事项一、建筑密度介绍 建筑密度(building density;building coverage ratio),指在一定范围内,建筑物的基底面积总和与占用地面积的比…

纠删码ReedSolomon

随着大数据技术的发展,HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性,HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本,1TB的原始数据需要占用3TB的磁盘空间,存储利用率只有1/3。而且系统中大部分…

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL(Graph Query Language)是一种用于API的查询语言和运行时环境,由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比,GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…

Spring技术内幕笔记之SpringMvc

WebApplicationContext接口的类继承关系 org.springframework.web.context.ContextLoader#initWebApplicationContext 对IOC容器的初始化 SpringMvc如何设计 DispatcherServlet类继承关系 MVC处理流程图如下: DispatcherServlet的工作大致可以分为两个部分&#xf…

NFC物联网开发智能衣橱解决方案

智能衣橱是智能家居的重要内容,现代家居市场对家居智能化控制尤为重视。但是,传统家居生产功能和模式已经无法满足智能化时代的需求,所以家居智能化成为家居行业发展的主要需求。与传统衣橱对比,智能衣橱的功能强大方便人们的生活…

Android--Jetpack--WorkManager详解

2024已经到来,愿你安睡时,山河入梦。愿你醒来时,满目春风。愿你欢笑时,始终如一。愿你行进时,前程似锦,坦荡从容。 编程语言的未来? 目录 一,定义 二,特点 三&#xff0c…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。这个问题如何解决?

这个错误信息 vue-cli-service 不是内部或外部命令,也不是可运行的程序或批处理文件 表示 vue-cli-service 命令在你的系统上未被识别。这通常是因为 Vue CLI 没有被正确安装或其路径没有被加入到系统的环境变量中。以下是几个解决这个问题的步骤: 确认 …

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表,无需连续内存 随机访问慢(要沿着链表遍历) 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组,需要连续内存 随机访问快(指根据下标访问) 尾部插入、删除性能可以&…

从0搭建github.io网页

点击跳转到🔗我的博客文章目录 从0搭建github.io网页 文章目录 从0搭建github.io网页1.成果展示1.1 网址和源码1.2 页面展示 2.new对象2.1 创建仓库 3.github.io仓库的初始化3.1 千里之行,始于足下3.2 _config.yml3.3 一点杂活 4.PerCheung.github.io.p…

Linux 命令echo

命令作用 输出一行字符串在shell中,可以打印变量的值输出结果写入到文件在显示器上显示一段文字,起到提示的作用 语法 echo [选项] [字符串] 参数 字符含义-n不自动换行-e解释转义字符-E不解释转义字符 如果-e有效,则识别以下序列&…

SpringBoot 项目如何生成 swagger 文档

推荐使用 springdoc-openapi 的理由 1、springdoc-openapi 是 spring 官方出品,与 springboot 兼容更好(springfox 兼容有坑) 2、springdoc-openapi 社区更活跃,springfox 已经 2 年没更新了 3、springdoc-openapi 的注解更接近 …

(一)Matlab数值计算基础

目录 1.1Matlab命令组成 1.1.1基本符号 1.1.2功能符号 1.1.3常用命令 1.1Matlab命令组成 1.1.1基本符号 #提示运算符,表示软件处于准备就绪状态。在提示符号后输入一条命令或者一段程序后按Enter键,软件将给出相应的结果 >> *…

【Proteus仿真】【Arduino单片机】汽车尾气检测报警系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用按键、LCD1602液晶、蜂鸣器模块、CO、NOx、HC和PM2.5气体传感器等。 主要功能: 系统运行后,LCD1602显示CO、NOx、HC和…

手机录屏没有声音?让你的录屏有声有色

“有人知道手机录屏怎么录声音吗?今天录制了一个小时的直播视频,后面查看的时候发现没有声音,真的非常崩溃,想问问大家有没有办法,解决这个问题。” 在手机录屏的过程中,有时候我们可能会面临录制视频没有…

Spring技术内幕笔记之IOC的实现

IOC容器的实现 依赖反转: 依赖对象的获得被反转了,于是依赖反转更名为:依赖注入。许多应用都是由两个或者多个类通过彼此的合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象的引用,如果这个获取过程需要自身…

从0开始搭建清华ChatGLM3 6b大模型(Windows RTX4090版)

目录 1、硬件及软件说明 2、安装Anaconda 3、安装Git版本控制 ​4、安装pytorch驱动 5、安装ChatGLM3 1、硬件及软件说明 硬件:主要是GPU卡内存要足够,本次搭建使用的RTX4090卡一张,单卡内存24G,为什么选择4090?…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候,为了实现某些特定的效果,需要指定特定的坐标系,但是现有的数据可能不是所需要的坐标系,这时候就需要对现有的数据坐标系进行处理,这里为大家介绍一下ArcGIS Pro中指定坐标系的方法,希望能…