ElasticSearch之单值多字段查询以及dis max query

写在前面

在查询中经常有这样的查询场景,我们只有一个输入框,但是输入的值需要同时对多个字段进行查询,这就是单值多字段的查询,像下图:
在这里插入图片描述

1:例子

首先来准备测试数据:

DELETE blogs
PUT /blogs/_doc/1
{"title": "Quick brown rabbits","body": "Brown rabbits are commonly seen."
}PUT /blogs/_doc/2
{"title": "Keeping pets healthy","body": "My quick brown fox eats rabbits on a regular basis"
}

假定我们现在搜索brown fox,查询在title或者是body中包含其的文档,很明显我们需要使用should查询:

POST /blogs/_search
{"query": {"bool": {"should": [{"match": {"title": "Brown fox"}},{"match": {"body": "Brown fox"}}]}}
}

在这里插入图片描述
如图中结果,在文档2的body中存在完全匹配brown fox的内容,按照常理,其应该具有最高的分数,即在最靠前的位置,但事实并非如此,出现这种现象的原因是should查询的算分机制如下:
在这里插入图片描述
则文档1的算分过程如下:

1:title中包含brown,假定给0.3分,body中包含brown给0.3分,则总分0.6分
2:匹配的文档数是2,所以得分0.6*2=1.2分
3:总文档数2,所以最终得分1.2/2=0.6分

文档2的算分过程如下:

1:title中不匹配给0分,body中包含brown和fox给0.9分,则总分0.9分
2:匹配的文档数是1,所以得分0.9*1=0.9分
3:总文档数2,所以最终得分0.9/2=0.45分

所以文档1的最终得分就比文档2的高了。如何解决没有匹配到理想的结果这个问题呢,如果是我们将算分机制从sum变为max就能很轻松的解决这个问题了,这就需要用到disjunction max query,这种查询方式会取所有匹配的最高分作为该文档的最终得分,如下:

POST /blogs/_search
{"query": {"dis_max": {"queries": [{"match": {"title": "Brown fox"}},{"match": {"body": "Brown fox"}}]}}
}

在这里插入图片描述
接着我们在来看如下的查询:

POST /blogs/_search
{"query": {"dis_max": {"queries": [{"match": {"title": "quick pets"}},{"match": {"body": "quick pets"}}]}}
}

查询quick pet,按照dis_max的查询逻辑,文档1和2将会得到相同的分数,结果也确实是如此:
在这里插入图片描述
此时情况又不太一样,在文档1的title中包含quick,而body不匹配,但文档2,title中包含pets,body中包含quick,所以应该给文档2更高的分数才符合常理,此时又该怎么做呢?其实在dis_max中是有一个tie_break参数的,如下:
在这里插入图片描述
该参数的作用是与非最高分的匹配项的分数相乘,然后再和最高分加在一起作为文档的最终得分,也就是文档最高分+非最高分1*tie_breaker+非最高分2*tie_breaker,当不指定时,es可能按照该值为0处理,或者时干脆就不考虑该参数了,反正不指定tie_breaker时的效果就是取最高分作为文档最终得分,那么咱们这里的情况,只需要指定一个合适的tie_breaker的值就行了,如下:
在这里插入图片描述
实际的业务场景中,我们需要使用不同的查询方式并灵活调整参数,来满足不同的业务需求。

写在后面

参考文章列表

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

记录 | docker内执行apt update报错GPG error

1. 执行 sudo apt-get update 命令时遇到这个错误,是服务器没有这个公钥的意思 rootadmin:~# sudo apt-get update Get:1 https://download.docker.com/linux/ubuntu focal InRelease [36.2 kB] Err:1 https://download.docker.com/linux/ubuntu focal InRelease T…

基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统

文章目录 基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统项目概述招聘岗位数据爬虫分析系统展示用户注册登录系统首页IT招聘数据开发岗-javaIT招聘数据开发岗-PythonIT招聘数据开发岗-Android算法方面运维方面测试方面招聘岗位薪资多维度精准预测招聘岗位分析推荐 结语…

Linux之ACL访问控制列表

一、ACL权限的介绍 1.1 什么是ACL 访问控制列表(ACL)是一种网络安全技术,它通过在网络设备(如路由器、交换机和防火墙)上定义一系列规则,对进出接口的数据包进行控制。这些规则可以包含“允许”&…

【Java EE初阶二十四】servlet的深入理解

1. Servlet API 的学习 下面主要学习这三个类,就已经可以完成 Servlet 的大部分开发了; 1. Httpservlet 2. HttpServletRequest 3. HttpServletResponse 2. Httpservlet的学习 2.1 Httpservlet在tomcat的工作原理 写一个 Servlet 代码,往往都…

跟随realworldCTF,做一个http网络协议黑客

前言 本报告旨在对RealWorldCTF 2024体验赛中的Pwn方向题目——"Be-an-HTPPd-Hacker"进行深入解析和讲解。该题目涉及一个十一年前的项目,其基于C语言实现了HTTP协议。我们将通过对该协议进行栈溢出攻击,探索真实世界中的攻击手法,…

PostgreSQL索引篇 | BTree

B-Tree索引 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) B树特点: 非叶子节点含一个或多个关键字值和子节点指针,不指向实际数据的存储位置所有关键字都是叶子节点,每个叶…

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中,调度中心(位于scheduler包)是整个React运行时的中枢(其实是心脏),所以理解了scheduler调度,就基本掌握了React的核心React两大循环:从宏…

git修改及合并commit提交

在开发过程中,保持代码记录清晰会更方便追踪,对代码审核人员也更有便宜。 修改commit提交 比如我们刚提交了一个commit,但之后要追加代码到已经推送到远程仓库的提交中,这时我们可以选择修改commit提交,使新的更改也推…

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏,知来者犹可追 创作不易,宝子们!如果这篇文章对你们…

Sora - 探索AI视频模型的无限可能

随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨Sora的技术特点、应用场景以及对未…

悄悄话花费的时间(C语言)

题目描述 给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 …

【Docker】初学者 Docker 基础操作指南:从拉取镜像到运行、停止、删除容器

在现代软件开发和部署中,容器化技术已经成为一种常见的方式,它能够提供一种轻量级、可移植和可扩展的应用程序打包和部署解决方案。Docker 是目前最流行的容器化平台之一,它提供了一整套工具和技术,使得容器的创建、运行和管理变得…

Linux(ACT)权限管理

文章目录 一、 ATC简介二、 案例1. 添加测试目录、用户、组,并将用户添加到组2. 修改目录的所有者和所属组3. 设定权限4. 为临时用户分配权限5. 验证acl权限 6. 控制组的acl权限 一、 ATC简介 ACL(Access Control List,访问控制列表&#xf…

GPT-SoVITS 快速声音克隆使用案例:webui、api接口

参考: https://github.com/RVC-Boss/GPT-SoVITS 环境: Python 3.10 PyTorch 2.1.2, CUDA 12.0 安装包: 1、使用: 1)下载项目 git clone https://github.com/RVC-Boss/GPT-SoVITS.git2)下载预训练模型 https://huggingface.co/lj1995/GPT-SoVITS 下载模型文件放到GPT…

NXP实战笔记(八):S32K3xx基于RTD-SDK在S32DS上配置LCU实现ABZ解码

目录 1、概述 2、SDK配置 2.1、IO配置 2.2、TRGMUX配置 2.3、LCU配置 2.4、Trgmux配置 2.5、Emios配置 2.6、代码实现 1、概述 碰到光电编码器、磁编码器等,有时候传出来的位置信息为ABZ的方式,在S32K3里面通过TRGMUX、LCU、Emios结合的方式可以实现ABZ解码。 官方…

【深入理解设计模式】建造者设计模式

建造者设计模式 建造者设计模式(Builder Pattern)是一种创建型设计模式,旨在通过将复杂对象的构建过程拆分成多个简单的步骤,使得相同的构建过程可以创建不同的表示。该模式允许您使用相同的构建过程来创建不同的对象表示。 概述…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的疲劳驾驶检测系统(Python+PySide6界面+训练代码)

摘要:本研究详述了一种采用深度学习技术的疲劳驾驶检测系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识别疲…

AI工具新革命:从ChatGPT到Sora,生成式AI改变世界

这个春节着实精彩,“春山学”吃透了,不如把目光移向OpenAI又一重磅产品——文生视频大模型Sora。智能新纪元已然开启,因为正如周鸿祎所说:“,Sora的诞生意味着AGI(通用人工智能)的实现将从10年缩短到1年。”…

为什么选择 SaaS SIEM ?

当今的企业越来越依赖技术,这意味着无懈可击的网络安全的重要性怎么强调也不为过。随着组织应对现代数字生态系统的复杂性,维护系统的完整性已不再只是“可有可无”,而是一种必需。  这就是安全信息和事件管理 (SIEM)作为网络安全中最重要…

Stable Diffusion 绘画入门教程(webui)-ControlNet(Seg)

上篇文章介绍了深度Depth,这篇文章介绍下seg(Segmentation) 意思为语义分割, 通俗理解就是把图中的不同物体元素按类别不同,标为不同的颜色,不同的颜色代表不同的元素类别,如下图,左边为原图&a…