【Elasticsearch】简单搜索(三)
简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。
这篇文章主要介绍检索相关的操作,单值、多值、范围、模糊等查询方式,使用bool支持多种条件复杂查询。
一、环境准备
版本
Docker version 20.10.22
elasticsearch:7.13.3
kibana:7.13.3
ps:具体启动命令参考第一篇ES博客
二、数据准备
下载官网测试数据
在ES官网中提供了简单的查询数据。点击下载示例数据 官方测试数据(bank)
使用postman导入到ES中
请求类型:POST
请求地址:http://127.0.0.1:9200/bank/account/_bulk?pretty
请求参数:binary类型,选择导入的json

Bank索引中的字段类型
执行命令GET bank/_mapping查看bank索引的字段类型为 “text”,在ES中 “text” 类型用于存储长文本数据,并进行全文索引。
以address字段为例,其类型为 “text”,其中也存在子字段为 “keyword” 的字段,类型为 “keyword”。“keyword” 类型用于存储关键字或短文本数据,通常用于精确匹配和排序操作。
通过定义子字段,可以在同一个字段上同时使用不同类型的分析器和查询方式。对于 “address” 字段,你可以使用 “text” 类型进行全文搜索,同时也可以使用 “keyword” 类型进行精确匹配和排序。
ps:使用方式为 address.keyword
在这个示例中, “keyword” 子字段还定义了 “ignore_above” 属性,它指定了该子字段中的值超过256个字符时将被截断。这可以用来限制关键字的长度,以便控制索引大小和提高检索性能。
{"bank" : {"mappings" : {"properties" : {"account_number" : {"type" : "long"},"address" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}// 省略其他字段}}}
}
四、标准查询
匹配单个字段
通过以下命令查询索引 bank 中,地址含有 place 字样的数据,返回了 181 条。
此字段为 text,查询时会进行分词匹配,像 282 Kings Place会被ES进行分词,查询条件中含有分词后的单词,所以会被查出来。适合全文检索时使用。
其中 _score 返回值为匹配程度的一个得分,一定程度上讲,分值越大匹配越近似。
GET /bank/_search
{"query": {"match": {"address": "place"}}
}GET /bank/_search
{"query": {"term": {"address": "place"}}
}// 查询结果"hits" : [{"_index" : "bank","_type" : "account","_id" : "20","_score" : 1.7070332,"_source" : {"account_number" : 20,"balance" : 16418,"firstname" : "Elinor","lastname" : "Ratliff","age" : 36,"gender" : "M","address" : "282 Kings Place","employer" : "Scentric","email" : "elinorratliff@scentric.com","city" : "Ribera","state" : "WA"}},
精准匹配单个字段
上述查询在 address 后加上 keyword 的限制,那么这个字段就是 keyword 类型,只能进行精确查询,不再通过分词检索。age本身为数值型字段,不存在分词操作,查询全都是精确匹配。
GET /bank/_search
{"query": {"term": {"address.keyword": "282 Kings Place"}}
}GET /bank/_search
{"query": {"term": {"age": "32"}}
}
多值匹配单个字段
使用 terms 命令,可以对字段进行多种关键词搜索,效果如同关系型数据库的 in 查询。
GET /bank/_search
{"query": {"terms": {"age": ["32","33","34"]}}
}
范围查询
使用 range 关键词。参数含义如下
- gt - 大于 ( > )
- gte - 大于且等于 ( >= )
- lt - 小于 ( < )
- lte - 小于且等于 ( <= )
GET /bank/_search
{"query": {"range": {"age": {"gte": 32,"lte": 33}}}
}
模糊查询
模糊查询有多重方式,这里介绍两种,一种是模糊,一种是正则
GET /bank/_search
{"query": {"wildcard": {"firstname": {"value": "am*"}}}
}
四 、Bool组合查询
在ES中bool查询就是用来组合布尔查询条件,布尔查询条件,就是类似SQL中的and 、or 。
下面是一个复合查询语句,分别使用了must、filter、must_not、should。下面的语句相当于SQL
SELECT*
FROMbank
WHEREgender = "M" AND state = "IA" AND city != "Healy" OR ( age = 39 OR age = 21)
POST bank/_search
{"query": {"bool": {"must": [{"match": {"gender.keyword": "M"}}],"filter": [{"match": {"state.keyword": "IA"}}],"must_not": [{"match": {"city.keyword": "Healy"}}],"should": [{"match": {"age": "39"}},{"match": {"age": "21"}}]}},"from": 0,"size": 10,"sort": [{"firstname.keyword": {"order": "desc"}}],"aggs": {}
}
查询关键词 Query Action
- 布尔查询:must,must_not,should等。类似SQL的and,or,! 等
- 匹配查询:match multi_match等。类似SQL的like
- 范围查询:range。类似SQL的大于,小于,等于
- term查询:term。类似SQL的 “=”
- 正则查询:regex 正则
- exists和missing查询:类似于SQL is null,is not null
查询语法总结
- 最外层为query
- 单重条件查询只需在 query 写入条件,复合查询条件包含在bool对象中
分页查询
from、size 分别对应 page 和 pageSize
排序
排序的写法就如一个对象,对象的 key 为字段名,value为排序规则,当然是可以多字段一起排序的,写入多个即可
查询关键词与分数关系
| must | must查询是必要条件,必须满足。参与相关性评分 |
|---|---|
| filter | 与must类似,同样必须满足。不参与相关性评分,但结果集会被缓存 |
| should | 如果只有一个 should 子句情况下与 must 子句结果一样,如果有多个should子句情况下,命中任何一个即可 |
| must_not | 与must类似,同样必须不满足。不参与相关性评分,但结果集会被缓存 |
五、总结
- 在ES中,如同普通SQL语句都有着类似API可以调用。
- ES支持对内容进行分词,根据分词进行搜索,并对结果进行打分。适合对文章内容进行搜索,而关系型数据库例如 MySQL,对这个功能支持能力不强。
- 查询语句在query内层套用 bool,可以支持多种条件过滤,同时也可以计算得分。
相关文章:
【Elasticsearch】简单搜索(三)
简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。 这篇文章主要介绍检索相…...
【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析
简述 当进行需求分析时,通常着重考虑三个主要层次:业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性,用户需求明确最终用户的期望,而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提…...
Linux基础知识 总结
Linux基础知识 总结 1、Clion的简单介绍 CLion是以IntelliJ为基础,专为开发C及C所设计的跨平台IDE,可以在Windows、Linux及MacOS使用,这里我是在ubuntu 16.0.4基础上安装。2、下载 Linux版Clion的.tar.gz的压缩包 wget https://download.j…...
网上申请流量卡要不要身份证?填写的信息安全吗?
网上申请流量卡要不要身份证?当然是要的! 现在直接从营业厅办理流量卡的很少了,都是直接在网上申请大流量卡,在这里小编提醒大家,在网上申请大流量卡和激活时都是需要提供个人证件的。 申请时提供身份证号是为了运营…...
关于计算机缺失vcruntime140.dll文件的解决方法分享
在计算机系统中,DLL(动态链接库)是一种特殊的文件类型,它包含了可以被多个程序共享的代码和数据。其中,VCRuntime140.dll是一个由Microsoft Visual C Redistributable package提供的运行时库文件,它为许多M…...
华为乾坤区县教育安全云服务解决方案(2)
本文承接: https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案(2) 课程地址解决方案部署整体流程组网规划…...
PL/SQL异常抓取
目录 1. -- 什么是异常 2. 如何捕获预定义异常? 3.捕获异常的两个函数 SQLCODE :为错误代码返回一个数值 SQLERRM : 返回字符串的数据,包含了与错误相关的信息. 1. -- 什么是异常 DECLARE V_JOB EMP.JOB%TYPE; BEGIN SELECT JOB INTO V_JOB FROM EMP WHERE JOB CLERK; D…...
Java 18的未来:新特性和编程实践
文章目录 引言新特性预览1. 基于值的类的进一步改进2. 模式匹配的增强3. 新的垃圾回收器4. 扩展的模块系统5. 更强大的异步编程 编程实践示例1:基于值的类示例2:模式匹配的增强示例3:新的垃圾回收器 结论 🎉欢迎来到Java学习路线专…...
2024快手校招面试真题汇总及其解答(三)
11. 联合索引 联合索引是指包含多个列的索引,与之概念相对的是单列索引,仅包含一个数据列。在大多数情况下,建立多列索引的好处都要多于单列索引。 联合索引的优点 联合索引的优点如下: 提高查询效率:联合索引可以提高查询效率,特别是对于复杂的查询条件。减少磁盘IO:…...
【QandA C++】内存泄漏、进程地址空间、堆和栈、内存对齐、大小端和判断、虚拟内存等重点知识汇总
目录 内存泄漏 内存模型 、进程地址空间 堆和栈的区别 内存对齐 大端小端及判断 虚拟内存有什么作用 内存泄漏 概念: 是指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况, 内存泄漏并不是指内存在物理上的消失, 而是应用程序分配了某段内存后, 因为设计错误…...
怒刷LeetCode的第12天(Java版)
目录 第一题 题目来源 题目内容 解决方法 方法一:贪心 第二题 题目来源 题目内容 解决方法 方法一:双指针 方法二:KMP算法 方法三:indexOf方法 方法四:Boyer-Moore算法 方法五:Rabin-Karp算法…...
RabbitMQ实现秒杀场景示例
本文章通过MQ队列来实现秒杀场景 整体的设计如下图,整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理 1、首先先创建MQ的配置文件 Configuration public class RabbitConfig {public static final String DEAD_LETTER_EXCHANGE "deadLetterE…...
如何提升网站排名优化(百度SEO优化,轻松提升排名)
在当今互联网时代,拥有一个优秀的网站是很重要的。而一个网站如果能够在搜索引擎上的排名很靠前,那么将会带来更多的流量、更多的用户和更多的利润。那么如何提升网站排名优化呢?蘑菇号www.mooogu.cn 百度SEO优化的5个规则 1.关键词选取要合…...
CountDownLatch 和 CyclicBarrier 用法以及区别
在使用多线程执行任务时,通常需要在主线程进行阻塞等待,直到所有线程执行完毕,主线程才能继续向下执行,主要有以下几种可选方式 1. 调用 main 线程的 sleep 方法 一般用于预估线程的执行时间,在主线程内执行线程sleep…...
9.9喝遍“茶、奶、果、酒”,茶饮价格战是因为“无活可整”?
“家人们谁懂啊,周一瑞幸周二奈雪周三茶百道周四库迪周五古茗周六coco,9块9根本喝不完!” 紧随咖啡的9.9大战,茶饮们也在今年加速“蜜雪冰城化”,9.9变成了一种潮流。伴随着茶百道、coco、奈雪的茶等品牌把9.9玩出了更…...
echarts 学习网址
1、PPChart 网址:PPChart - 让图表更简单 2、YX-Chartlib 网址:http://chartlib.datains.cn3、isqqw 网址:echarts图表集4、makeapie 网址:makeapie echarts社区图表可视化案例5、Chart.Top 网址:chart.top - 让图…...
android源码编译
整包编译 导入环境变量 source ./build/envsetup.shlunch:选择平台编译选项make:执行编译 编译单个apk 进入到apk mk所在路径 mma...
盘点双电机驱动技术
对于电动汽车来说,双电机相对于单电机加主减速器或变速箱的方案在提高驱动效率方面的优势: 第一,单电机在低速、高速轻载等情况下,效率降低比较严重。 电动机的高效区间虽然比内燃机大得多,但是汽车的转速和转矩要求…...
ubuntu下用pycharm专业版连接AI服务器及其docker环境
一:用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹,后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹,作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下: 点击左…...
IntentFilter笔记
一、action <intent-filter>中可以有多个action,Intent只要匹配其中1个action即匹配成功<intent-filter>没有action,任何Intent无法与之匹配<intent-filter>中有action,Intent中没有action时可以与之匹配成功<intent-fi…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
