掌握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…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...