ES语法(一)概括

embedded/2024/12/5 2:17:50/

一、语法

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 格式表示,通常包含 queryfilter 字段。在执行查询时,通常向特定的索引发起请求,使用 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
}


http://www.ppmy.cn/embedded/143060.html

相关文章

WPF_1

剖析最简单的WPF程序 什么是项目模板 首先新建一个WPF项目模板 直接运行&#xff1a; 最简单的WPF程序 解决方案就对应着客户的一个需求&#xff0c;解决方案中可以含多个项目&#xff0c;每个项目编译后的结果是一个程序集Assembly。 现在来看下MainWindow.xaml中代码 <…

【微服务】SpringBoot 对接飞书多维表格事件回调监听流程详解

目录 一、前言 二、前置准备 2.1 创建一个应用 2.2 准备一张测试使用的多维表 2.3 获取对接文档 2.4 工程中添加SDK 三、对接过程 3.1 配置Encrypt Key 和 Verification Token 3.2 配置订阅方式 3.3 添加事件 3.4 申请权限 3.5 编写订阅代码 3.6 订阅文档事件 3.7…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

浅谈Java库之‌Apache Commons Math

一、Apache Commons Math 基本介绍 Apache Commons Math 是 Apache 软件基金会维护的一个 Java 数学库&#xff0c;它提供了一系列用于数值分析、统计计算、线性代数等领域的工具类。 二、Apache Commons Math 使用方法 1、全面的中文文档&#xff1a; 为 Java 开发者提供了详…

[C#]C#实现数字到人民币大写金额的转换

在软件开发中&#xff0c;将数字转换成人民币大写形式的需求通常出现在需要生成财务报表、发票、收据、账单等正式文档的场景中。这些文档往往需要遵循一定的格式和规范&#xff0c;以确保信息的准确性和可读性&#xff0c;特别是在处理与金钱相关的数据时。 比如&#xff1a; …

贪心算法入门(一)

第1题 礼物 查看测评数据信息 国庆马上要到了。小明喜欢的礼物有n种分别是&#xff1a;公仔、电子手表、漫画书等。 每种礼物有一件&#xff0c;每种礼物价钱都不一样。小明手头上有 m 元。 小明最多可以买多少件礼物&#xff1f; 输入格式 第一行&#xff0c;两个整数&…

计算机网络(架构)

计算机网络-自顶向下 前言 如何描述计算机网络的整体运作与功能? 对世界上已有的计算机网络有一个清晰明了的认知? 在我的理解中, 网络的核心功能是 将信息从一端发送到另一端. 因此, 其实只要具备这样的功能的都可以被称作是网络. 小到两台计算机之间的相互链接, 数据交换…

Rust学习笔记_08——String

Rust学习笔记_05——控制流(1) Rust学习笔记_06——控制流(2) Rust学习笔记_07——枚举和范围 文章目录 字符串类型1. 字符串类型与字面量字符串1.1 字符串类型 (String)1.2 字面量字符串 (&static str) 2. &#xff08;字符串类型&#xff09;创建3. &#xff08;字符串类…