ES入门四:Term Query Api实践

通过上一篇文章我们知道,在全文搜索的时候,系统会对检索内容进行分词,然后在对每个词项进行检索,但是我们今天介绍的基于词项查询的Api是不需要对输入内容进行分词的,Term Level Query会将输入的内容作为一个整体来进行检索,并使用相关性算法对包含整个检索内容的文档进行相关性算法

Term是文本经过分词器处理得出来的词项,是Es中表达语义的最小单位。ES中提供很多基于Term的查询功能,下面几个Api是我们今天将会介绍的:

  • Term Query:返回在指定字段中准确包含了检索内容的文档
  • Terms Query:跟Term Query类似,不过可以同时检索多个词项
  • Range Query:范围查询
  • Exist Query:返回在指定字段上有值的文档,一般用于过滤没有值的文档
  • Prefix Query:返回在指定字段中包含指定前缀的文档
  • Wildcard Query:通配符查询

## Term Query Term Query Api返回在指定字段中准确包含了检索内容的文档,你可以使用此Api去查询精确值的字段,如书本Id、价格等,其示例如下:
![image.png](https://img-blog.csdnimg.cn/img_convert/61cbcc5c62ceda291fbe50a855625706.png)
返回结果:
![image.png](https://img-blog.csdnimg.cn/img_convert/24f4de4836a13067686da052c459692c.png)

需要注意的是,要避免将Term Query用在text类型的字段上,例如:
image.png
如上示例所示,我们的数据中确实有两个文档的书名里还有“linux”,但是无法匹配上。
之前说过,基于Term的查询不会去检索内容进行分词的,输入的文本会作为一个整体进行查询。但是在索引数据的时候会进行分词并转换为小写(书名字段用了standard分词器,会进行小写转换),所以上述的列子是无法匹配任何文档的,只有小写的“linux”才可以匹配文档。如果要对text类型的字段进行搜索,应该使用match Api而不是使用Term Query Api

Terms Query

Terms Query的功能跟Term Query类似,不过可以同时索引多个词项的功能。例如我需要检索作者为“Stephen Hawking”或者“Wolfgang Mauerer”写的书的时候,可以这样做:
image.png
返回结果:
image.png

Range Query

Range Query Api可以查询字段值符合某个范围的文档数据。例如查询书本大于等于 10.0 小于20.0的书本信息。其示例如下:

image.png

返回结果:
image.png
如上所示,Range Query Api是比较简单的,在“range”字段中指定需要查询的文档字段,这里我们查询“price”字段,并且规定其值大于等于10.0,小于10.0。
image.png

Exist Query

使用Exist Query Api可以查询那些在指定字段上有值的文档,一般情况下使用这个Api来做文档过滤。
那么什么样的值才被认为是空值那?一个字段的值为空可能是由于下面这几个原因导致的:

  • 字段的Json值为null或者[], 如果一个字段压根不存在于文档的_source里,也被认为是空的
  • 一个字段在Mapping定义的时候设置了“index”:false
  • 一个字段的值的长度超过了Mapping里这个字段设置的ignore_above时
  • 当字段的值不合规,并且mapping中的这个字段设置了ignore_malformed

使用示例如下:
image.png
返回结果:
image.png

image.png
返回结果:
image.png
这个查询是无法匹配任何文档的,因为mapping中没有定义“press”

Prefix Query

Prefix Query可以查询在指定字段中包含特定前缀的文档,其示例如下:
image.png

返回结果:
image.png
如上所示,使用了Prefix Query查询还有“linu”前缀的文档,如果书本名字中还有“linu”开头的词语的文档会被匹配上。需要注意的是,text类型的字段会被分词,成为一个个的term,所以这里的前缀匹配是匹配这些分词后的term

Wildcard Query

Wildcard Queyr允许使用通配符表达式进行匹配。Wildcard Queyr支持两个通配符:

  • ?,使用 ? 来匹配任意字符。
  • *,使用 * 来匹配 0 或多个字符。

使用示例如下:
image.png
如上示例,使用了Wildcard Query查询书名中含有“linu”开头的文档

**需要注意的是,Prefix Query和Wildcard Query在进行查询的时候需要扫描倒排索引中的词项列表才能找到全部匹配的词项,然后在获取匹配词项对应的文档Id。所以使用Wildcard Query的时候需要注意性能问题,要尽量避main使用左通配匹配模式,如“linux”、“.linux”

使用Term Level Query Api进行结构化搜索

结构化搜索指的是对结构化的数据进行搜索。那什么是结构化数据那?你可以认为是高度组织、结构化的数据,例如日期、颜色、地区编码、价格等等

像书本的价格都是有精确的格式的,我们可以对这个数据进行逻辑操作,例如判读价格的范围。一般我们对结构化数据进行精确化匹配,而精确匹配的结果为布尔值,这个时候可以考虑跳过相关性算法的步骤,从而提高搜索性能
使用 Constant Score 可以将 query 转化为 filter,可以忽略相关性算分的环节,并且 filter 可以有效利用缓存,从而提高查询的性能。其示例如下

image.png
返回结果:
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

es6 相关面试题

1 var, let ,const 区别? 2 手写将对象进行合并 手写合并对象 3 普通函数和箭头函数区别? 4 find 和 filter的区别? 5 some和every区别?

土壤数据合集:全国各省土壤类型分布矢量数据+中国土壤质地空间分布数据+中国土壤侵蚀空间分布数据

给大家分享3份土壤数据 1、全国各省土壤类型分布矢量数据 2、中国土壤质地空间分布数据 3、中国土壤侵蚀空间分布数据 #1全国各省土壤类型分布矢量数据 本数据包括两个数据集: (1)1:400万中国土壤图(2000), (2&…

视黄酸诱导基因-1敲除诱导树突状细胞的不成熟特性并延长异体移植小鼠的存活时间研究【AbMole】

器官移植是一种用于替换因疾病、损伤或其他原因受损的人体器官的医疗程序。尽管器官移植可以挽救生命并显著提高生活质量,但存在供体器官短缺、排斥反应、器官功能障碍、感染和药物副作用等问题。为了提高移植成功率和受体健康,需要有效的免疫策略。树突…

真不愧是华为出来的,真的太厉害了。。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 实习去了博彦科技(外包),做的就是螺丝钉的活,后面…

公众号运营怎么做?系统干货分享!

公众号运营是一个系统工程,需要我们从基础、排版、内容创作等多方面来入手。只有做好每一个环节,才能运营出一个高质量的公众号。 公众号运营怎么做?这是每一个企业都需要面对的问题。在这个问题上,伯乐网络传媒给大家从几个方面…

如何本地创建websocket服务端并发布到公网实现远程访问

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

数据结构中各个排序的定义以及代码表示

在数据结构中,排序(Sorting)是将一组数据按照特定的顺序重新排列的过程。排序算法是计算机科学中的经典问题,有多种不同的排序算法可供选择,每种算法都有其独特的特点和适用场景。 下面介绍几种常见的排序算法的定义和…

企微hook源码第二弹

免费的企微框架,可下载测试。 支持文本消息,图片消息,视频消息,文件消息。 有兴趣可以进群交流。649480745,群内不定期开源企微hook源码 接下来就是第二弹的企微hook源码。后续会在群内开源完整源码。

go并发模式之----使用时顺序模式

常见模式之二:使用时顺序模式 定义 顾名思义,起初goroutine不管是怎么个先后顺序,等到要使用的时候,需要按照一定的顺序来,也被称为未来使用模式 使用场景 每个goroutine函数都比较独立,不可通过参数循环…

centos7 挂载磁盘

centos7 挂载磁盘 1.对磁盘进行分区1.1.fdisk -l 查看磁盘1.2.对磁盘进行分区1.3 验证 2.磁盘格式化3 .磁盘挂载到对应目录3.1 挂载3.2 验证 4. 开机自动挂载磁盘4.1 查看uuid4.2 写入开机文件4.3 重启4.4.验证 1.对磁盘进行分区 1.1.fdisk -l 查看磁盘 (注&#…

QPaint绘制自定义仪表盘组件03

网上视频抄的&#xff0c;用来自己看一下&#xff0c;看完就删掉 ui mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QDebug> #include <QtMath> #include <QDialog> #include <QPainter> #include …

端接电阻没选对,DDR颗粒白费?

高速先生成员--姜杰 端接可以解决很多反射问题&#xff0c;如果还有问题&#xff0c;有没有一种可能是端接电阻阻值没选对&#xff1f; 对于点到点的拓扑&#xff0c;末端并联电阻的阻值比较容易选择&#xff0c;端接电阻阻值R与传输线特征阻抗一样即可。 VTT为1V时&#xff0c…

Linux-查看服务器配置信息

一、查看操作系统 1.1、查看操作系统的版本 命令:cat /etc/redhat-release 1.2、查看系统内核 命令:uname –a 二、查看cpu信息 2.1、所有信息 lscpu [root@tes ~]# lscpu Architecture: x86_64 ##cpu架构 CPU op-mode(s): 32-bit, 64-bit Byte Order:…

大模型日报|今日必读的5篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.杨立昆团队提出图像世界模型&#xff1a;在视觉表征学习中学习和利用世界模型 联合嵌入预测架构&#xff08;JEPA&#xff09;通过利用世界模型进行学习&#xff0c;被认为是一种很有前途的自监督方法&#xff0c;…

[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”

已经被VScode ssh毒死好几次了&#xff0c;都是执行命令意外中断&#xff0c;然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器&#xff0c;VSCode可以连上了&#xff0c; 系统ssh还是不行&#xff0c;报错“kex_exchange_identification: read: Connecti…

Linux系统CPU模式部署Qwen1.5-14B

Qwen1.5已适配Ollama。 Ollama 是一个命令行聊天机器人&#xff0c;它使得几乎可以在任何地方使用大型语言模型变得简单。 下载 Ollma 安装文件 访问以下网站&#xff1a;https://ollama.com/download/linux 执行&#xff1a;curl -fsSL https://ollama.com/install.sh | sh…

大地测量学课堂笔记:1、绪论

慕课网址&#xff1a;https://www.icourse163.org/course/WHU-1464124180?fromsearchPage&outVendorzw_mooc_pcssjg_https://www.icourse163.org/course/WHU-1464124180?fromsearchPage&outVendorzw_mooc_pcssjg_ 1. 大地测量学的定义 大地测量学是专门研究精确测量…

MySQL基础-----可视化工具DataGrip安装与使用

目录 前言 安装DataGrip 使用 1.添加数据源 2.展示所有数据库 3. 创建数据库 4.创建表 5.修改表结构 6. 在DataGrip中执行SQL语句 汉化 前言 上一期&#xff0c;我们已经讲解了通过DDL 语句&#xff0c;如何操作数据库、操作表、操作表中的字段&#xff0c;而通过 D…

计算机提示vcruntime140.dll丢失,教你5个方法快速解决dll问题

当计算机系统中无法找到vcruntime140.dll这个特定的动态链接库文件时&#xff0c;可能会引发一系列运行问题&#xff0c;具体表现形式多样且影响范围较广。对于依赖于该文件运行的各类软件应用来说&#xff0c;缺失vcruntime140.dll将直接导致程序无法正常启动或执行&#xff0…

XSS_lab(level6-level10)

level6 仍旧输入:<script>alert(1)</script> script被加了下划线 尝试on事件 也被加了下划线 尝试伪协议:"><a hrefjavascript:alert(1)>1</a>// 还是被加了下划线&#xff0c;那么就要尝试绕过方法了&#xff1a; 我所知的几种绕过方法&a…