ES语法(一)概括
一、语法
1、请求方式
Elasticsearch(ES)使用基于 JSON 的查询 DSL(领域特定语言)来与数据交互。
一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
| 被 < > 标记的部件 | 含义 |
| VERB | 适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD 或者 `DELETE`。 |
| PROTOCOL | http 或者 https`(如果你在 ElasticSearch 前面有一个 `https 代理) |
| HOST | ElasticSearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。 |
| PORT | 运行 ElasticSearch HTTP 服务的端口号,默认是 9200 。 |
| PATH | API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。 |
| QUERY_STRING | 任意可选的查询字符串参数 (例如 pretty 将格式化地输出 JSON 返回值,使其更容易阅读) |
| BODY | 一个 JSON 格式的请求体 (如果请求需要的话) |
2、大小写敏感
es是大小写敏感的。
二、请求类型
1、GET请求
GET 请求通常用于查询操作;
它会通过 URL 参数传递请求数据,查询条件较简单时适用。
2、POST请求
POST 请求通常用于提交数据,如添加或更新文档;
也可用于执行复杂的查询:复杂查询或聚合(特别是当查询语句较大时,无法通过 URL 传递)
三、查询返回结果
执行命令:索引库名称/_search
空搜索的结果为:
{"took": 2, # 该命令请求花费了多长时间,单位:毫秒。"timed_out": false, # 搜索是否超时"_shards": { # 搜索分片信息"total": 3, # 搜索分片总数"successful": 3, # 搜索成功的分片数量"skipped": 0, # 没有搜索的分片,跳过的分片"failed": 0 # 搜索失败的分片数量},"hits": { # 搜索结果集。需要的一切数据都是从hits中获取"total": 21798, # 返回多少条数据"max_score": 1, #返回结果中,最大的匹配度分值"hits": [ # 默认查询前十条数据,根据分值降序排序,这里为了节省地方,把默认查询的前十条数据删了9条,只剩下一条数据{"_index": "", # 索引库名称"_type": "", # 类型名称"_id": "", # 该条数据的id"_score": 1, # 关键字与该条数据的匹配度分值"_routing": "", # routing参数是一个可选参数,默认使用文档的_id值,用于计算文档所属分片"_source": { # 索引库中类型,返回结果字段,不指定的话,默认全部显示出来"id": 1,"orderNo": "","appId": "","componentAppId": "","settleNo": "","outSettleNo": "","settleAmount": 5,"orderAmount": 7,"settleStatus": 3,"paymentChannel": 1,"version": 2,"settleTime": ,"createTime": ,"updateTime": ,"promotionAccountId": "","invoiceStatus": 1,"promotionTypeValue": 0,"commissionRateFeeCentAmount": 0,"commissionChargeFeeCentAmount": 0,"promotionFeeCentAmount": 2,"developerPromotionFeeCentAmount": 0,"promotionType": ""}}]}
}
按照从上到下的顺序,一共四个返回值,took,timed_out,_shards,hits。
1、took
该命令请求花费了多长时间,单位:毫秒。
2、timed_out
搜索是否超时。
3、shards
搜索分片信息。
(1)total
搜索分片总数。
(2)successful
搜索成功的分片数量。
(3)skipped
没有搜索的分片,跳过的分片。
(4)failed
搜索失败的分片数量。
4、hits
搜索结果集,需要的一切数据都是从hits中获取。
(1)total
返回多少条数据。
(2)max_score
返回结果中,最大的匹配度分值。
(3)hits
默认查询前十条数据,根据分值降序排序。
(4)_index
索引库名称。
(5)_type
类型名称
(6)_id
该条数据的id。
(7)_score
关键字与该条数据的匹配度分值。
(8)_source
索引库中类型,返回结果字段,不指定的话,默认全部显示出来。
四、查询语法介绍
语法GET /索引/类型/_search 查询条件。
这个查询条件有两种写法,
1、URL 拼接
在GET的url中指定参数,这种方法比较简单。如
(1)查询所有
GET /索引名称/_search
(2) 条件查询:
GET /es-test/_search?q=blog
(3)分页查询:
GET /es-test/_search?size=5&from=10
2、DSL(常用)
还有一种是ES查询表达式 (DSL) 检索,所有查询都以 JSON 格式表示,通常包含 query 或 filter 字段。在执行查询时,通常向特定的索引发起请求,使用 HTTP 方法(GET 或 POST)。JSON 的常用字段有:
(1)sort
封装排序
(2) _source
指定查询结果的字段,不指定则默认返回所有字段
GET /wtyy-test/user/_search
{"query":{"match_all":{}},"_source":["name","age"]
}
(3)query
封装查询条件
(4)分页条件
from、size
(5)highlight高亮
通常自己开发搜索引擎的时候,往往需要对搜索结果中的关键词高亮这种功能。注意,带条件查询高亮才生效,如无条件分页查询高亮是不生效的。
GET wtyy-test/user/_search
{"query": {"match": {"address": "北京"}},"highlight": {"fields": {"address": {}}}
}
返回:
{"took": 61,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 1,"max_score": 0.7787034,"hits": [{"_index": "wtyy-test","_type": "user","_id": "1","_score": 0.7787034,"_source": {"name": "王五1","age": 1,"address": "湖北","school": "测试学校"},"highlight": {"address": ["湖<em>北</em>"]}}]}
}
在返回体中有一个 highlight 字段,里面对 message 字段进行高亮处理: 关键词使用了 <em></em> 标签包围了。可以使用 css 修改对 <em> 标签的样式,以实现关键词高亮效果。
五、es的并发处理
使用的乐观锁 在 后面加上 version:
POST /user/student/1?version=3
{"name":"zyk","age":0
}
只有version = 当前记录的version的时候才能修改成功。es 可以自动控制 vserion 通过 ,version_type指定 ,version_type=external 要求 version 大于当前的version ,version_type=internal 这个是默认值 ,必须等于当前的值<br>version_type=external_gte 大于等于当前的version<br>version_type=force 已经废弃了不能用了,我也不知道以前什么意思,提升, Validation Failed: 1: version type [force] may no longer be used
POST /user/student/1?version_type=external&version=505
{"name":"zyk","age":0
}
相关文章:
ES语法(一)概括
一、语法 1、请求方式 Elasticsearch(ES)使用基于 JSON 的查询 DSL(领域特定语言)来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成: curl -X<VERB> <PROTOCOL>://&l…...
(vue)el-cascader多选级联选择器,值取最后一级的数据
(vue)el-cascader多选级联选择器,取值取最后一级的数据 获取到:[“养殖区”,“鸡棚”,“E5001”] 期望:[“E5001”] 问题: 解决方法 增加change事件方法,处理选中的value值 1.单选 <el-cascaderv-model"tags2":o…...
友思特方案 | 精密制程的光影贴合:半导体制造中的高功率紫外光源
导读 为新能源锂电行业赋能第四站:半导体制造中的高功率紫外光源!稳定输出、灵活控制的曝光设备是新能源/半导体行业高端生产中减少误差、提高效率的核心技术,友思特 ALE 系列 UV LED 紫外光源集合6大优势,为精密制造的健康发展提…...
README写作技巧
做一个项目,首先第一眼看上去要美观,这样才有看下去的动力。做项目亦是如此,如果每一步应付做的话,我想动力也不会太大,最终很大概率会放弃或者进度缓慢。 1.README组成 README是对项目的一个说明,它对观看…...
【密码学】分组密码的工作模式
1.电码本模式(ECB) 优点: 每个数据块独立加密,可并行加密,实现简单。 缺点: 相同明文会产生相同密文,不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程:用相同的密钥分别对…...
SQL 和 NoSQL 有什么区别?
SQL(Structured Query Language,结构化查询语言)和NoSQL数据库是两种不同类型的数据库管理系统,它们在多个方面存在显著的区别。以下是对SQL和NoSQL主要区别的详细分析: 一、数据存储与模型 SQL数据库 使用关系模型来…...
提升网站流量的关键:AI在SEO关键词优化中的应用
内容概要 在当今数字时代,提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步,为搜索引擎优化(SEO)提供了强有力的支持,尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁,其…...
Harnessing Large Language Models for Training-free Video Anomaly Detection
标题:利用大型语言模型实现无训练的视频异常检测 原文链接:https://openaccess.thecvf.com/content/CVPR2024/papers/Zanella_Harnessing_Large_Language_Models_for_Training-free_Video_Anomaly_Detection_CVPR_2024_paper.pdf 源码链接:ht…...
如何通过自学成长为一名后端开发工程师?
大家好,我是袁庭新。最近,有星友向我提出了一个很好的问题:如何通过自学成为一名后端开发工程师? 为了解答这个疑问,我特意制作了一个视频来详细分享我的看法和建议。 戳链接:如何通过自学成长为一名后端开…...
HDR视频技术之六:色调映射
图像显示技术的最终目的就是使得显示的图像效果尽量接近人们在自然界中观察到的对应的场景。 HDR 图像与视频有着更高的亮度、更深的位深、更广的色域,因此它无法在常见的普通显示器上显示。 入门级的显示器与播放设备(例如普通人家使用的电视࿰…...
(洛谷题目)P11060 【MX-X4-T0】「Jason-1」x!
思路: 理解问题:首先,我们要理解题目的要求,即判断一个非负整数n的阶乘n!是否是n1的倍数。 阶乘的定义:根据阶乘的定义,n!是所有小于等于n的正整数的乘积。特别地,0!被定义为1。 特殊情况处理…...
TEXT2SQL工具vanna本地化安装和应用
TEXT2SQL工具vanna本地化安装和应用 Vanna和Text2SQL环境安装和数据准备 conda虚拟环境安装数据准备ollama环境准备 ollama安装和运行ollama下载模型测试下API方式正常使用 chromaDB的默认的embedding模型准备 vanna脚本跑起来 Vanna和Text2SQL TEXT2SQL即文本转SQL…...
Bloom 效果
1、Bloom 效果是什么 Bloom效果(中文也可以叫做高光溢出效果),是一种使画面中亮度较高的区域产生一种光晕或发光效果的图像处理技术,Bloom效果的主要目的是模拟现实世界中强光源在相机镜头或人眼中造成的散射和反射现象ÿ…...
AWS 机器学习,推动 AI 技术的健康发展
目录 一、AI 正在改变生产方式二、从炒作走向务实1、选对场景2、重视数据3、产品思维4、持续优化 三、人才是最稀缺的资源四、负责任的 AI 开发五、未来已来六、启示与思考七、结语 如果说传统软件开发是手工作坊,那么 AI 就像工业革命带来的机器生产。 在最新的一…...
MCPTT 与BTC
MCPTT(Mission Critical Push-to-Talk)和B-TrunC(宽带集群)是两种关键通信标准,它们分别由不同的组织制定和推广。 MCPTT(Mission Critical Push-to-Talk)标准由3GPP(第三代合作伙伴…...
Jackson - JsonGenerator创建JSON、JsonParser解析JSON
以下是关于如何使用Jackson的JsonGenerator类来创建JSON内容以及如何使用JsonParser类来读取JSON内容的教程。 依赖项 首先,在pom.xml文件中添加以下依赖项以引入Jackson库: <dependency><groupId>com.fasterxml.jackson.core</groupI…...
Linux-音频应用编程
ALPHA I.MX6U 开发板支持音频,板上搭载了音频编解码芯片 WM8960,支持播放以及录音功能!本章我们来学习 Linux 下的音频应用编程,音频应用编程相比于前面几个章节所介绍的内容、其难度有所上升,但是笔者仅向大家介绍 Li…...
《QT 示例宝库:探索丰富的编程世界》
《QT 示例宝库:探索丰富的编程世界》 一、QT 基础示例(一)QRadioButton 示例(二)拦截关闭事件示例 二、QT 常用代码示例(一)QObject 相关操作(二)Qt 基本容器遍历&#x…...
腾讯云流式湖仓统一存储实践
点击蓝字⬆ 关注我们 本文共计5107 预计阅读时长16分钟 * 本文将分享腾讯云流式湖仓的架构与实践。主要内容包括: 流计算Oceanus介绍腾讯云流式湖仓架构腾讯云流式湖仓实践腾讯云流式湖仓发展规划 一、流计算Oceanus介绍 随着大数据技术的发展࿰…...
18 设计模式之迭代器模式(书籍遍历案例)
一、什么是迭代器模式 迭代器模式(Iterator Pattern)是一种行为型设计模式,允许客户端通过统一的接口顺序访问一个集合对象中的元素,而无需暴露集合对象的内部实现。这个模式主要用于访问聚合对象(如集合、数组等&…...
Shermie-proxy:基于Node.js的脚本化HTTP/HTTPS代理调试工具实战指南
1. 项目概述与核心价值最近在折腾一些本地开发环境下的网络请求调试和抓包,发现一个挺有意思的开源项目kxg3030/shermie-proxy。这本质上是一个基于 Node.js 实现的 HTTP/HTTPS 代理服务器,但它的定位非常清晰:专为开发者本地调试和网络请求分…...
TypeScript + Next.js + Tailwind CSS 现代Web开发最佳实践模板解析
1. 项目概述:一个现代Web开发的“瑞士军刀”如果你最近在考虑启动一个Next.js项目,并且希望它从一开始就具备现代化的技术栈、清晰的代码结构和高效的开发体验,那么你很可能已经听说过或者正在寻找一个合适的“启动器”。theodorusclarence/t…...
HunterPie完全指南:如何在《怪物猎人世界》中获得实时数据监控优势
HunterPie完全指南:如何在《怪物猎人世界》中获得实时数据监控优势 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/…...
终极指南:如何用NoFences桌面分区工具提升3倍工作效率
终极指南:如何用NoFences桌面分区工具提升3倍工作效率 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上杂乱无章的图标?每天…...
深度解析:B站视频解析API的高效实现方案
深度解析:B站视频解析API的高效实现方案 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 在当今视频内容生态中,开发者经常面临一个技术难题:如何在自己的应用中无缝…...
弱引用TWeakObjectPtr原理
弱引用的原理:从通用思路到 UE TWeakObjectPtr 原理总结: !!#ff0000 UE 的 GC 体系有一张全局对象表 GUObjectArray,弱引用存了一个索引,以及这个物体创建时的序列号,简单来说是不是弱引用先拿着索引去序列号找一下&am…...
别再只盯着永恒之蓝打靶了!用Metasploit实战MS17-010的5个高阶后渗透技巧
实战MS17-010后渗透:5个提升内网横向移动效率的专业技巧 当Meterpreter会话成功建立后,真正的挑战才刚刚开始。许多安全研究员在渗透测试中往往止步于初始入侵,却忽略了后渗透阶段才是红队演练的核心战场。本文将分享五个经过实战检验的高阶…...
ChatGPT资源宝库:从提示工程到项目实践的完整指南
1. 项目概述:一份关于ChatGPT的“Awesome”清单意味着什么?如果你最近在GitHub上搜索过任何与ChatGPT、AI或提示工程相关的内容,那么你大概率见过一个以“awesome-”开头的仓库。而sindresorhus/awesome-chatgpt无疑是这个领域里最知名、最常…...
ESP32-S2物联网实战:IPv6配置与Adafruit IO双向通信
1. 项目概述与核心价值如果你手头有一块ESP32-S2开发板,并且已经厌倦了仅仅让它连上Wi-Fi、点个灯,想让它真正“活”起来,成为一个能融入现代互联网、能与云端自由对话的智能节点,那么这篇文章就是为你准备的。我们将深入两个在物…...
【ZYNQ】AXI4总线协议实战:从握手时序到PS-PL高效通信
1. AXI4总线协议基础:从握手信号到通道架构 第一次接触ZYNQ的PS-PL通信时,我被AXI4协议里那些VALID/READY信号搞得头晕眼花。直到在示波器上抓到真实的握手波形,才突然理解这个看似复杂的协议其实像极了我们日常的对话机制——只有当说话方准…...
