掌握ElasticSearch(五):查询和过滤器
一、查询和过滤器的区别
在 Elasticsearch 中,查询(Query)和过滤器(Filter)是用于检索和筛选数据的重要组成部分。它们虽然都能用来查找文档,但在性能和用法上有所不同。下面详细介绍查询和过滤器的概念以及它们之间的区别。
查询 (Query)
查询不仅用于查找匹配的文档,还可以计算相关性得分(_score
),以确定文档与查询的匹配程度。查询通常用于全文搜索、短语匹配等场景,其中文档的相关性非常重要。
过滤器 (Filter)
过滤器用于精确筛选文档,不计算相关性得分。因此,过滤器比查询更快,因为它们不需要计算分数。过滤器通常用于过滤特定条件的文档,如日期范围、特定值等。
性能差异
- 查询:计算相关性得分,性能相对较低。
- 过滤器:不计算相关性得分,性能较高,适合用于频繁使用的条件。
使用场景
- 查询:当需要根据相关性排序结果时,例如全文搜索、推荐系统等。
- 过滤器:当需要精确筛选文档时,例如日期范围、类别过滤等。
组合使用
在实际应用中,查询和过滤器经常一起使用,以达到最佳效果。例如,可以使用 bool
查询来组合查询和过滤器:
{"query": {"bool": {"must": [{"match": {"title": "Elasticsearch"}}],"filter": [{"range": {"publish_date": {"gte": "2023-01-01","lte": "2023-12-31"}}}]}}
}
在这个例子中:
must
子句中的match
查询用于全文搜索标题中包含 “Elasticsearch” 的文档。filter
子句中的range
过滤器用于筛选publish_date
在 2023 年内的文档。
二、ElasticSearch的查询类型
Elasticsearch 提供了多种查询类型,每种类型都有其特定的用途和适用场景。下面是一些常见的查询类型及其简要说明:
1. 全文查询 (Full Text Queries)
这些查询类型用于全文搜索,可以处理复杂的自然语言查询。
-
Match Query: 最常用的全文查询,可以处理分析器对文本的分析。
{"match": {"field": "text"} }
-
Multi Match Query: 类似于
match
查询,但可以在多个字段上进行搜索。{"multi_match": {"query": "text","fields": ["field1", "field2"]} }
-
Match Phrase Query: 用于匹配完整的短语,而不是单独的词项。
{"match_phrase": {"field": "text"} }
-
Match Phrase Prefix Query: 类似于
match_phrase
,但允许前缀匹配。{"match_phrase_prefix": {"field": "text"} }
-
Common Terms Query: 用于查找常见词和不常见词,可以控制如何处理低频词和高频词。
{"common": {"field": {"query": "text","cutoff_frequency": 0.001}} }
2. 术语级别查询 (Term Level Queries)
这些查询类型用于精确匹配,不涉及分析器。
-
Term Query: 用于精确匹配单个词项。
{"term": {"field": "value"} }
-
Terms Query: 用于匹配多个词项。
{"terms": {"field": ["value1", "value2"]} }
-
Range Query: 用于匹配某个范围内的值。
{"range": {"field": {"gte": 10,"lte": 20}} }
-
Exists Query: 用于检查某个字段是否存在。
{"exists": {"field": "field"} }
-
Prefix Query: 用于前缀匹配。
{"prefix": {"field": "pre"} }
-
Wildcard Query: 用于通配符匹配。
{"wildcard": {"field": "te*t"} }
-
Regexp Query: 用于正则表达式匹配。
{"regexp": {"field": "te.*t"} }
3. 布尔查询 (Compound Queries)
这些查询类型用于组合多个查询条件。
-
Bool Query: 用于组合多个查询条件,支持
must
,should
,must_not
,filter
子句。{"bool": {"must": [{ "match": { "field1": "text" } }],"should": [{ "match": { "field2": "text" } }],"must_not": [{ "match": { "field3": "text" } }],"filter": [{ "range": { "field4": { "gte": 10 } } }]} }
-
Dis Max Query: 用于在多个字段上进行查询,并选择最相关的文档。
{"dis_max": {"queries": [{ "match": { "field1": "text" } },{ "match": { "field2": "text" } }]} }
-
Constant Score Query: 用于将查询转换为固定得分。
{"constant_score": {"filter": {"term": { "field": "value" }}} }
4. 特殊查询 (Specialized Queries)
这些查询类型用于特定的高级功能。
-
Function Score Query: 用于自定义文档的得分。
{"function_score": {"query": { "match_all": {} },"functions": [{"gauss": {"field": {"origin": "2023-01-01","scale": "10d"}}}]} }
-
Script Score Query: 用于使用脚本计算文档的得分。
{"script_score": {"query": { "match_all": {} },"script": {"source": "doc['field'].value * 2"}} }
-
More Like This Query: 用于查找与给定文档相似的文档。
{"more_like_this": {"fields": ["field1", "field2"],"like": "text","min_term_freq": 1,"min_doc_freq": 1} }
5. 地理查询 (Geo Queries)
这些查询类型用于地理空间数据的搜索。
-
Geo Distance Query: 用于查找距离指定点一定范围内的文档。
{"geo_distance": {"distance": "200km","location": {"lat": 40.715,"lon": -74.006}} }
-
Geo Bounding Box Query: 用于查找位于指定矩形区域内的文档。
{"geo_bounding_box": {"location": {"top_left": {"lat": 40.73,"lon": -74.00},"bottom_right": {"lat": 40.71,"lon": -73.99}}} }
-
Geo Polygon Query: 用于查找位于指定多边形区域内的文档。
{"geo_polygon": {"location": {"points": [{ "lat": 40.73, "lon": -74.00 },{ "lat": 40.73, "lon": -73.99 },{ "lat": 40.71, "lon": -73.99 },{ "lat": 40.71, "lon": -74.00 }]}} }
6. 其他查询
-
Match All Query: 返回所有文档,常用于获取索引中的所有数据。
{"match_all": {} }
-
Match None Query: 不返回任何文档,常用于测试或调试。
{"match_none": {} }
三、ElasticSearch的过滤器类型
在 Elasticsearch 中,过滤器(Filter)用于精确筛选文档,不计算相关性得分,因此性能较高。下面是一些常见的过滤器类型及其简要说明:
1. 术语级别过滤器 (Term Level Filters)
这些过滤器用于精确匹配,不涉及分析器。
-
Term Filter: 用于精确匹配单个词项。
{"term": {"field": "value"} }
-
Terms Filter: 用于匹配多个词项。
{"terms": {"field": ["value1", "value2"]} }
-
Range Filter: 用于匹配某个范围内的值。
{"range": {"field": {"gte": 10,"lte": 20}} }
-
Exists Filter: 用于检查某个字段是否存在。
{"exists": {"field": "field"} }
-
Prefix Filter: 用于前缀匹配。
{"prefix": {"field": "pre"} }
-
Wildcard Filter: 用于通配符匹配。
{"wildcard": {"field": "te*t"} }
-
Regexp Filter: 用于正则表达式匹配。
{"regexp": {"field": "te.*t"} }
2. 布尔过滤器 (Boolean Filters)
这些过滤器用于组合多个过滤条件。
- Bool Filter: 用于组合多个过滤条件,支持
must
,should
,must_not
,filter
子句。{"bool": {"must": [{ "term": { "field1": "value1" } }],"should": [{ "term": { "field2": "value2" } }],"must_not": [{ "term": { "field3": "value3" } }],"filter": [{ "range": { "field4": { "gte": 10 } } }]} }
3. 特殊过滤器 (Specialized Filters)
这些过滤器用于特定的高级功能。
-
Script Filter: 用于使用脚本进行复杂的条件判断。
{"script": {"script": {"source": "doc['field'].value > 10"}} }
-
Ids Filter: 用于匹配特定的文档 ID。
{"ids": {"values": ["1", "2", "3"]} }
4. 地理过滤器 (Geo Filters)
这些过滤器用于地理空间数据的筛选。
-
Geo Distance Filter: 用于查找距离指定点一定范围内的文档。
{"geo_distance": {"distance": "200km","location": {"lat": 40.715,"lon": -74.006}} }
-
Geo Bounding Box Filter: 用于查找位于指定矩形区域内的文档。
{"geo_bounding_box": {"location": {"top_left": {"lat": 40.73,"lon": -74.00},"bottom_right": {"lat": 40.71,"lon": -73.99}}} }
-
Geo Polygon Filter: 用于查找位于指定多边形区域内的文档。
{"geo_polygon": {"location": {"points": [{ "lat": 40.73, "lon": -74.00 },{ "lat": 40.73, "lon": -73.99 },{ "lat": 40.71, "lon": -73.99 },{ "lat": 40.71, "lon": -74.00 }]}} }
5. 其他过滤器
-
Match All Filter: 返回所有文档,常用于获取索引中的所有数据。
{"match_all": {} }
-
Match None Filter: 不返回任何文档,常用于测试或调试。
{"match_none": {} }
相关文章:
掌握ElasticSearch(五):查询和过滤器
一、查询和过滤器的区别 在 Elasticsearch 中,查询(Query)和过滤器(Filter)是用于检索和筛选数据的重要组成部分。它们虽然都能用来查找文档,但在性能和用法上有所不同。下面详细介绍查询和过滤器的概念以…...
自学[vue+SpringCloud]-012-SpringCloud工程发送邮件
文章目录 前言一、配置QQ邮箱1.1 设置1.2 获取授权码 二、服务发送邮件2.1 引入依赖包2.2 新建AlarmMessageDto2.3 增加controller代码2.4 main方法测试 总结 前言 skywalking监控通过webhook调用SpringCloud服务接口,接口中发送告警邮件。 一、配置QQ邮箱 1.1 设…...
STM32通信协议-I2C
目录 一,IC2的协议规则 I2C总线是PHILIPS公司开发的两线式串行总线,I2C总线主要解决了单片机一对多通信的问题 两根通信线:SCL,SDA,同步,半双工通信,支持数据应答机制,支持总线挂载多设备。 …...
廉颇老矣尚能饭否,实践甘肃数据挖掘挑战赛作物与杂草的智能识别,基于YOLOv3全系列【tiny/l/spp】参数模型开发构建田间低头作物杂草智能化检测识别模型
一、背景 田间杂草的有效管理是现代农业生产中面临的重要挑战之一。杂草不仅竞争作物的养分、 水分和阳光,还可能成为害虫和病原体的寄主,从而降低农作物的产量和品质。因此,开发 高效、精确的杂草检测和管理系统对于提高农业生产效率、降低化…...
基于Django+Python的宾馆管理系统设计与实现
项目运行 需要先安装Python的相关依赖:pymysql,Django3.2.8,pillow 使用pip install 安装 第一步:创建数据库 第二步:执行SQL语句,.sql文件,运行该文件中的SQL语句 第三步:修改源…...
MySQL--mysql的安装
1.Linux上mysql的安装: Ubuntu下: (1)安装前首先切换到管理员身份:sudo su (2)然后执行命令:apt install mysql-server (注意:装的是服务器端,客户端自动就安装了) (3)执行过程中按y; 2.Mysql初始化配置 注意,一定是sudo su,必须是管理员才能进行Mysql的初始化设置; 初始化…...
qt 构建、执行qmake、运行、重新构建、清除
qt右键功能有 构建、执行qmake、运行、重新构建、清除,下面简单介绍一下各个模块的作用。 1. 执行qmake qmake是一个工具, 它根据pro文件生成makefile文件,而makefile文件中则定义编译与连接的规则。pro文件中定义了头文件,源文件…...
微软发布 Win11 22H2/23H2 十月可选更新KB5044380!
系统之家于10月23日发出最新报道,微软针对Win11 22H2和23H2用户,发布了10月可选更新KB5044380,用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局,支持用户使用Xbox控制器在屏幕上移动和键…...
TensorFlow面试整理-TensorFlow 基础概念
在学习和准备 TensorFlow 时,了解基础概念是至关重要的。以下是 TensorFlow 的一些核心基础概念: 1. Tensor (张量) ● 定义:张量是 TensorFlow 中的核心数据结构。它是一个多维数组,可以表示标量、向量、矩阵以及更高维的数组。张量在数学上与矩阵非常相似,但可以具有任意…...
Java实现HTTP代理的技巧与方法
在互联网时代,代理IP已经成为了网络访问中不可或缺的一部分。无论是为了保护隐私,还是为了访问特定的网络资源,代理IP都能发挥重要作用。那么,如何在Java中实现HTTP代理呢?本文将带您逐步了解这个过程。 什么是HTTP代…...
MFC图形函数学习02——绘制像素点函数
再次强调一下,我们这里学习的MFC图形函数,是指绘制二维图形的函数。一般来说,一个二维图形组成的基本要素是点、线、面以及相关的颜色。在本文中,将学习绘制像素点函数,与绘制像素点相关的其它基础知识也随着绘图函数学…...
Oracle CONNECT BY、PRIOR和START WITH关键字详解
Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中,CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据,例如…...
gateway 整合 spring security oauth2
微服务分布式认证授权方案 在分布式授权系统中,授权服务要独立成一个模块做统一授权,无论客户端是浏览器,app或者第三方,都会在授权服务中获取权限,并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…...
Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)
前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质(Material)、…...
Eclipse Java 构建路径
Eclipse Java 构建路径 Eclipse 是一款广受欢迎的集成开发环境(IDE),特别适用于 Java 开发。在 Eclipse 中,构建路径(Build Path)是指编译器在编译项目时搜索类(.class)文件和源代码(.java)文件的路径。正确设置构建路径对于确保项目能够顺利编译和运行至关重要。 …...
FileLink跨网文件摆渡系统:重构跨网文件传输新时代
在数字化浪潮的推动下,企业对于数据的高效利用和安全管理提出了前所未有的要求。面对不同网络环境间的文件传输难题,传统方法往往显得力不从心,不仅效率低下,还存在极大的安全隐患。而FileLink跨网文件摆渡系统的出现,…...
macOS下QuickTime player+Blackhole录视频只录制系统声音
Blackhole是一个虚拟的音频驱动程序,免费的 安装方法: 方法1:通过homebrew安装 前提:你的系统中自己安装了homebrew,没有安装用方法2 系统终端执行下面的命令中的一个: brew install blackhole-2ch 或…...
Vscode + EIDE +CortexDebug 调试Stm32(记录)
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot…...
qt QApplication详解
一、概述 QApplication是Qt应用程序的基础类,负责设置和管理应用的环境。它的主要功能包括:初始化应用程序、管理事件循环、处理命令行参数、提供全局设置(如样式和调色板)以及创建和管理主窗口。通常在main函数中创建QApplicati…...
C++ 图像处理框架
在 C 中,有许多优秀的图像处理框架可以用来进行图像操作、计算机视觉、图像滤波等任务。以下是一些常用的 C 图像处理框架,每个框架都有其独特的特性和适用场景: 1. OpenCV OpenCV(Open Source Computer Vision Library…...
基于知识图谱的美食推荐系统
想象一下,每次打开应用,它都能为你量身推荐最符合你口味的美食,不需要再为“今天吃什么?”烦恼。这听起来是不是非常吸引人?今天就给大家介绍一个适合做毕业设计的创新项目——基于知识图谱的美食推荐系统!…...
记录:网鼎杯2024赛前热身WEB01
目录扫描,发现上传点,判断可能存在文件上传漏洞,并根据文件后缀判断网站开发语言为php 编写蚁剑一句话木马直接上传 蚁剑连接 这里生成 的flag是随机的,因为烽火台反作弊会随机生成环境,在一顿查找后,在hom…...
java 提示 避免用Apache Beanutils进行属性的copy。
避免用Apache Beanutils进行属性的copy。 Inspection info: 避免用Apache Beanutils进行属性的copy。 说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。 TestObject a new TestObject(); TestObject b new Te…...
autMan框架对接Kook机器人
一、创建kook机器人 KOOK 二、获取机器人token 三、填写autMan参数并重启 四、将机器人加入服务器 五、效果图 回复...
RK3568平台(camera篇)UVC AICamera集成
一.客供AIcamera集成思路 主板端:目前在RK主板上预留了一个USB接口,使用USB接口来连接供应商提供的UVC摄像头。 供应商UVC摄像头:目前供应商提供的usbcamera是rv1126,基于usb接口跟主板端相连接。 其实使用供应商提供的camera,里面的大部分功能供应商已经是做好的,里面…...
【mod分享】极品飞车10魔改模组,全新UI,全新道路,全新建筑,高清植被,全新的道路围栏,全新的天空,体验另一种速度与激情
各位好,今天小编给大家带来一款新的高清重置魔改MOD,本次高清重置的游戏叫《极品飞车10卡本峡谷》。 《极品飞车10:卡本峡谷》该游戏可选择四个模式:生涯、快速比赛、挑战赛、多人连线游戏模式(已不可用)&…...
[实时计算flink]数据摄入YAML作业快速入门
实时计算Flink版基于Flink CDC,通过开发YAML作业的方式有效地实现了将数据从源端同步到目标端的数据摄入工作。本文介绍如何快速构建一个YAML作业将MySQL库中的所有数据同步到StarRocks中。 前提条件 已创建Flink工作空间,详情请参见开通实时计算Flink版…...
CMOS 图像传感器:像素寻址与信号处理
CMOS image sensor : pixel addressing and signal processing CMOS image sensor 对于寻址和信号处理有三种架构 pixel serial readout and processingcolumn parallel readout and processingpixel parallel readout and processing 其中,图 (b) column paralle…...
React Native 项目使用Expo模拟器运行iOS和Android
iOS没有连接设备: 确保你已经用 USB 线将你的 iOS 设备连接到了你的 Mac。 设备未信任: 如果你的设备是第一次连接到 Mac,可能需要在设备上信任这台计算机。通常,当你连接设备时,设备上会弹出一个对话框,…...
鸿蒙-键盘弹出时 promptAction.showToast 被遮盖
可以设置弹窗显示模式showMode,支持显示在应用之上。 参考代码: promptAction.showToast({ message: Message Info, duration: 2000, showMode: promptAction.ToastShowMode.TOP_MOST }); 文档中心...
pHP可以做论坛网站吗/百度问答优化
ImagePrinter是在Port监视器端的虚拟打印机。 (1)在系统开机时,顺序调用以下函数:DllMain--->InitializePrintMonitor--->iEnumPorts(2次,后一次参数都是NULL)--->iOpenPort; (2&am…...
商城网站建设行情/西安seo学院
可能是没有安装权限。在linux系统下使用以下命令: chmod 777 com.umeng.demo_9847069_4.0.apk 然后,在xp系统下进行安装命令: adb install com.umeng.demo_9847069_4.0.apk 搞定。你呢?...
网络策划需要哪些技能/seo搜索引擎是什么
本次搭建的Scala环境是scala-2.11.0 一、Scala环境搭建 1.进入到scala的上传目录下解压scala到/root下 [rootslave1 wenjian]# tar -zxvf scala-2.11.0.tgz -C /root/2.进入到/root目录下,修改scala的名称(主要是好记) [rootslave1 ~]# mv…...
南京网站建设网/seo外推软件
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该…...
做音乐网站用什么程序/百度seo优化关键词
一、背景 现在主流的Java系的互联网公司里,绝大多数公司都使用Maven作为依赖管理工具,一般我们对于依赖的版本号,常见两种类型:一种以“-RELEASE”结尾,另一种以“-SNAPSHOT”结尾。你别看这一个小小差别,在…...
哈尔滨工程招投标信息网/优化关键词排名seo软件
今天,我们这里要说的就是在GridView里面如何新添加一行“删除”列,如何删除前弹出通知等。 首先,我们前端的代码如下: <asp:GridView ID"gridViewDxjk" CssClass"gridview" runat"server" Allow…...