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

Elasticsearch复合查询之Boosting Query

前言

ES 里面有 5 种复合查询,分别是:

  • Boolean Query
  • Boosting Query
  • Constant Score Query
  • Disjunction Max Query
  • Function Score Query

Boolean Query在之前已经介绍过了,今天来看一下 Boosting Query 用法,其实也非常简单,总结起来就一句话,对不期待的查询关键词进行相关性降分。

Boost 加权机制底层也是 Lucene 提供的能力,对重要的数据加权有两个时机,一个是在索引时,一个是在查询时,在索引时候加权查询性能会比较高但不灵活,所以都会选择在查询时加权,加权的方式也很简单,如:

title: china^20 OR  content: china^20

在 ES里面的大多数全文检索 单 Query 都支持 boost 加权,但想要实现降权却不行,因为 Lucene 底层不直接支持,需要使用 function score query来间接实现,boost 的数值必须是正数,当然也可以包括 0-1 之间的小数,所以在 ES 中就封装了 Boosting Query 来支持对某些关键词进行降权查询,却又不是不让其出现在查询结果中,只是让其排名靠后

写入测试数据

在 kibana 中的 dev_tools 的 console 中,直接使用下面的 POST 语句即可,需要注意,如果 ES
版本低于 7.x 的,在 PATH 里面要加上 type,否则会报错:

POST test01/doc/_bulk
{ "index" : { "_id" : "1" } }
{ "title" : "Collecting  Service", "content": "Logstash" }
{ "index" : { "_id" : "2" } }
{ "title" : "Collecting  Service", "content": "Beats" }
{ "index" : { "_id" : "3" } }
{ "title" : "Collecting  Service", "content": "FLume" }

写完之后,可以在 Management => Index patterns => Create Index Patterns 里面创建手动创建索引模板,可以看到生成了如下 mapping,需要注意的时,这里面自动推断的 mapping 字段并不能删减字段,因为我们是已经

将数据写入了 ES,如果想要控制字段的生成,比如不想要 content.keyword 字段,那么就要在写入数据前,提前定制 mapping 才可以

 

查询测试数据

GET test01/_search?
{"query": {"match": {"title": "Collecting"}}
}

返回结果:

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 6,"successful" : 6,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.2876821,"hits" : [{"_index" : "test01","_type" : "doc","_id" : "3","_score" : 0.2876821,"_source" : {"title" : "Collecting  Service","content" : "FLume"}},{"_index" : "test01","_type" : "doc","_id" : "2","_score" : 0.2876821,"_source" : {"title" : "Collecting  Service","content" : "Beats"}},{"_index" : "test01","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"title" : "Collecting  Service","content" : "Logstash"}}]}
}

可以看到评分都相等,这个时候如果我想要命中 logstash 的不优先展示,就可以使用 Boosting Query 了:

GET test01/_search?
{"query": {"boosting": {"positive": {"match": {"title": "Collecting  Service"}},"negative": {"match": {"content": "Logstash"}},"negative_boost": 0.5}}
}

结果展示:

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 6,"successful" : 6,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.5753642,"hits" : [{"_index" : "test01","_type" : "doc","_id" : "3","_score" : 0.5753642,"_source" : {"title" : "Collecting  Service","content" : "FLume"}},{"_index" : "test01","_type" : "doc","_id" : "2","_score" : 0.5753642,"_source" : {"title" : "Collecting  Service","content" : "Beats"}},{"_index" : "test01","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"title" : "Collecting  Service","content" : "Logstash"}}]}
}

Boosting Query原理

Positive Boosting:

这种形式用于增强具有特定条件的文档的得分。它由两个子查询组成:主查询(positive query)和副查询(boost query)。主查询用于匹配文档,而副查询用于对匹配到的文档进行权重调整。Boosting Query将副查询的分数与主查询的分数相乘,从而影响文档的最终得分。

Negative Boosting:

这种形式用于降低具有特定条件的文档的得分。它同样由两个子查询组成:主查询和副查询。在Negative Boosting中,主查询用于匹配文档,而副查询用于对不匹配的文档进行权重调整。Boosting Query将副查询的分数与主查询的分数相乘,并将结果从1中减去,以降低不匹配文档的得分。

Boosting Query的实现原理如下:

  1. 解析查询语句:Elasticsearch首先解析用户提供的Boosting Query语句,提取出主查询和副查询以及相应的权重。
  2. 执行查询:对索引中的文档进行主查询匹配,并为匹配到的文档计算得分。
  3. 计算副查询得分:对于每个匹配到的文档,执行副查询,并计算副查询的得分。
  4. 应用权重调整:根据Boosting Query的类型(Positive Boosting或Negative Boosting),将副查询的得分与主查询的得分相乘,或者从1中减去,从而调整文档的最终得分。
  5. 返回结果:根据得分对匹配的文档进行排序,将搜索结果返回给用户。

相关文章:

Elasticsearch复合查询之Boosting Query

前言 ES 里面有 5 种复合查询,分别是: Boolean QueryBoosting QueryConstant Score QueryDisjunction Max QueryFunction Score Query Boolean Query在之前已经介绍过了,今天来看一下 Boosting Query 用法,其实也非常简单&…...

Clickhouse基于文件复制写入

背景 目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入…...

梅赛德斯-奔驰将成为首家集成ChatGPT的汽车制造商

ChatGPT的受欢迎程度毋庸置疑。OpenAI这个基于人工智能的工具,每天能够吸引无数用户使用,已成为当下很受欢迎的技术热点。因此,有许多公司都在想方设法利用ChatGPT来提高产品吸引力,卖点以及性能。在汽车领域,梅赛德斯…...

QT-播放原始PCM音频流

QT multimedia audioplay.h /************************************************************************* 接口描述:原始音频播放类 拟制: 接口版本:V1.0 时间:20220922 说明: ********************************…...

【杂谈】聊聊我是如何从Java转入Web3的

我先说说我基本的一个情况吧: 我是之前是一位从业了传统web2行业三年的Java开发,在2018年尾才开始去关注区块链的,之前虽然也有混迹在币圈,但是没怎么关注到币圈的内在运行逻辑。 后面因为当时元宇宙和Web3的概念特别火&a…...

ArrayList

目录 1.ArrayList简介 2.ArrayList的构造 2.1ArrayList() 2.2ArrayList(Collection c) 2.3ArrayList(int initialCapacity) 3.ArrayList常见操作 4.ArrayList的遍历的遍历 1.ArrayList简介 在集合框架中, ArrayList 是一个普通的类,实现了 List…...

不重启Docker能添加自签SSL证书镜像仓库吗?

应用背景 在企业应用Docker规划初期配置非安全镜像仓库时,有时会遗漏一些仓库没配置,但此时应用程序已经在Docker平台上部署起来了,体量越大就越不会让人去直接重启Docker。 那么,不重启Docker能添加自签SSL证书镜像仓库吗&…...

Ajax介绍

1.与服务器进行数据交换:通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据。 2.异步交互:可以在 不重新加载整个页面 的情况下,与服务器交换数据并 更新部分网页 的技术,如: 搜索联想、用户名是否可…...

docker 学习--02 常用命令

docker 学习–02 常用命令 docker 学习-- 01 基础知识 docker 学习-- 03 环境安装(win10) 文章目录 docker 学习--02 常用命令1. 帮助启动类命令1.1启动docker1.2 停止docker1.3 重启docker1.4 查看docker1.5 设置开机自启1.6 查看docker概要信息1.7 查…...

socks5 保障网络安全与爬虫需求的完美融合

Socks5代理:跨足网络安全和爬虫领域的全能选手 Socks5代理作为一种通用的网络协议,为多种应用场景提供了强大的代理能力。它不仅支持TCP和UDP的数据传输,还具备更高级的安全特性,如用户身份验证和加密通信。在网络安全中&#xf…...

构建智能医疗未来:人工智能在线上问诊系统开发中的应用

随着人工智能技术的飞速发展,医疗领域也正在逐步迎来一场革命性的变革。其中,人工智能在在线上问诊系统开发中的应用,正为医疗产业带来全新的可能性。本文将深入探讨如何利用代码构建智能医疗未来,以提升线上问诊系统的效率、准确…...

css3-grid:grid 布局 / 基础使用

一、理解 grid 二、理解 css grid 布局 CSS Grid布局是一个二维的布局系统,它允许我们通过定义网格和网格中每个元素的位置和尺寸来进行页面布局。CSS Grid是一个非常强大的布局系统,它不仅可以用于构建网格布局,还可以用于定位元素&#xf…...

如何在windows电脑安装多个tomcat服务器和乱码问题

前提条件安装jdk 以17版本为例,将jdk8卸载干净 1.首先进入tomcat官网下载 tomcat网址 这里下载tomcat10为例子 1.1 这里选择方式一 下载解压版 2.解压后拷贝三份 分别命名为 8081、 8082、 8083 3.分别对每个tomcat执行以下操作 3.1 找到tomcat所在webapps文…...

flutter:webview_flutter的简单使用

前言 最近在研究如何在应用程序中嵌入Web视图,发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求,就使用了官方库,实现一些简单功能是完全ok的 基本使用 官方文档 https://pub-web.flutter-io.cn/packages/webv…...

Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计

本文是 3 篇系列文章的一部分,该系列文章将讨论智能手机镜头模组设计的挑战,从概念、设计到制造和结构变形的分析。本文是三部分系列的第一部分,将专注于OpticStudio中镜头模组的设计、分析和可制造性评估。(联系我们获取文章附件…...

jvm从入门到精通

jvm 1.jvm与java体系结构​​​​​​​...

[NLP]LLM 训练时GPU显存耗用量估计

以LLM中最常见的Adam fp16混合精度训练为例,分析其显存占用有以下四个部分: GPT-2含有1.5B个参数,如果用fp16格式,只需要1.5G*2Byte3GB显存, 但是模型状态实际上需要耗费1.5B*1624GB. 比如说有一个模型参数量是1M,在…...

Unity引擎使用InteriorCubeMap采样制作假室内效果

Unity引擎制作假室内效果 大家好,我是阿赵。   这次来介绍一种使用CubeMap做假室内效果的方式。这种技术名叫InteriorCubeMap,是UE引擎自带的节点效果。我这里是在Unity引擎里面的实现。 一、效果展示 这个假室内效果,要动态看才能看出效…...

Gin安装解决国内go 与 热加载

get 方式安装超时问题,国内直接用官网推荐的下面这个命令大概率是安装不成功的 go get -u github.com/gin-gonic/gin 可以在你的项目目录下执行下面几个命令: 比如我的项目在E:\Oproject\zl cmd E:\Oproject\zl>就在目录下执行 go env -w GO111…...

安防监控视频云存储平台EasyCVRH.265转码功能更新:新增分辨率配置

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...