Elasticsearch基本CURD操作语法讲解
当我们的ES集群搭建完成以后,我怎么能看到集群中各个节点状态以及主节点和健康情况呢,如下讲解使用curl命令来与ES集群进行交互、分别有查询主节点情况、集群状态、以及创建索引查看索引、查看分片以及对ES集群进行查询请求等操作。
CURL语法讲解
RESTful API:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
-X:指定请求方式<VERB>:GET,POST,PUT,DELETE 一般请求为GET、提交变更为POST、上传文件为PUT、删除操作为DELETE
<PROTOCOL>:协议,一般为HTTP协议
<HOST>:主机,可为主机的IP地址或Hostname
<PORT>:主机端口
<PATH>:路径,主机端口后的路径,如下几个路径:/_cat, /_search, /_cluster /_cat路径覆盖了大多数的信息内容,/_search为搜索所有的索引和文档类型
<QUERY_STRING>:查询字符串匹配规则
-d:指定主体内容
<BODY>:json格式的请求主体
Elasticsearch基本查询语句
//查看_cat支持的信息
kibana: GET /_cat
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat'//查看主节点信息
kibana: GET /_cat/master?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/master?v'//查看集群所有节点
kibana: GET /_cat/nodes?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/nodes?v'//查看所有索引信息
kibana: GET /_cat/indices?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/indices?v'//查看单个索引信息
kibana: GET /_cat/indices/movies?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/indices/movies?v'//查看所有分片信息
kibana: GET /_cat/shards?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/shards?v'//查看单个索引分片信息
kibana: GET /_cat/shards/movies?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/shards/movies?v'//查看集群健康状态
kibana: GET /_cat/health?v
kibana: GET _cluster/health
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/health?v'
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cluster/health?pretty'//查看插件
kibana: GET /_cat/plugins?v
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/plugins?v'//查看所有索引文档总数
kibana: GET _all/_count
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_all/_count?pretty'//查看指定索引文档总数
kibana: GET movies/_count
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/movies/_count?pretty'//查看所有模板
kibana: GET _cat/templates
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/templates?v'//查看状态为绿的索引
kibana: GET /_cat/indices?v&health=green
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/indices?v&health=green'//查看movies索引元数据
kibana: GET movies
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/movies?pretty'//按照文档数量排序索引
kibana: GET _cat/indices?v&s=docs.count:desc
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/indices?v&s=docs.count:desc'//查看各个索引占用内存大小并进行排序
kibana:
bash: curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/_cat/indices?v&h=i,tm&s=tm:desc'
Elasticsearch CURD语法
CURD | 请求方式 | 主体 | 说明 |
Create | PUT | /index/_create/id | 指定Document ID,创建文档,如果ID已存在,则失败 |
Create | POST | /index/_create/id | 指定Document ID,创建文档,如果ID已存在,则失败 |
Create | POST | /index/_doc | 自动生成ID,不会重复,重复提交则创建多个文档,文档版本都为1 |
Index | PUT | /index/_doc/id | 如果ID不存在,则创建新的文档,如果ID存在,则删除现有文档后创建新的文档,版本+1,ID相同 |
Index | POST | /index/_doc/id | 如果ID不存在,则创建新的文档,如果ID存在,则删除现有文档后创建新的文档,版本+1,ID相同 |
Read | GET | /index/_doc/id | 查看Document ID为1的文档 |
Update | POST | /index/_doc/id | 文档必须存在,否则更新失败,只能增量修改字段,不能减少字段,字段值可以随意修改,版本加1 |
Delete | Delete | /index/_doc/id | 文档必须存在,否则删除返回"not_found" |
Delete | Delete | /index | 删除索引,索引内的文档也会被随之而删除,要删除的索引必须存在,否则返回 "404" |
Create创建索引及文档
Create一个文档时,Elasticsearch支持自动生成文档ID和指定文档ID两种方式。
1.通过调用 POST /index/_doc 语法,系统自动生成文档Document ID。此种方法,即使创建的JSON文档重复,Document ID也不一致,如果重复使用POST多次提交,Elasticsearch将会创建多个内容重复但ID不一致的文档。
2.通过调用 POST /index/_create/id或PUT /index/_create/id语法,则手动指定生成Document ID,此种方法,如果我们指定ID的文档已存在,则创建失败,反正创建文档。
自动生成 Document ID
Kibana语法
POST /index/_doc
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}Bash语法
curl -XPOST -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/index/_doc?pretty' -d '
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}
POST 请求指定 Document ID
Kibana POST请求语法
POST /index/_create/1
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}Bash POST请求语法
curl -XPOST -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/index/_create/1?pretty' -d '
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}'
PUT请求指定 Document ID
#Kibana PUT请求语法
PUT /index/_create/1
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}Bash PUT请求语法
curl -XPUT -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/index/_create/1?pretty' -d '
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}'
Index创建索引文档或更新
Index语法可以有两种HTTP请求方式,分别是 POST和PUT,这种请求方法通过调用 /index/_doc/id 语法,指定了 Document ID来创建文档,如果Document ID不存在,则创建为新的文档,如果ID存在,则删除现有ID后创建新的文档,Document Version会进行 + 1。Index方式的原理是:如果文档已存在,先删除原有文档,然后再进行新增文档,版本+1。
#Kibana操作
POST /index/_doc/6 #PUT语法只需要把 POST 改为 PUT即可
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}
#Bash操作
curl -XPUT -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/index/_doc/6?pretty' -d '
{
"name": "WeiLiang Xu",
"Blogs": "abcops.cn",
"Is male": true,
"age": 25
}'
Read查询文档
Read为读取文档内容,Read使用的HTTP请求方式为 GET ,
#Kibana操作
GET /index/_doc/1 #操作index索引中Document ID为1的文档Bash操作
curl -XGET -u elastic:26tBktGolYCyZD2pPISW 'http://192.168.31.215:9201/index/_doc/1?pretty'
更多的GET语法见文章顶部
Update更新文档
Update方法与Index不同的是,Update在更新文档的时候不会删除原来的文档,而是真正的更新数据。Update更新的文档必须真实存在,Update更新只能对字段进行增量修改,对字段值可以进行随意更改,不能对文档字段进行减少更新。如果你需要减少字段,则使用Index去操作文档。
#Kibana操作
POST /weiliang/_update/1
{
"doc": {
"name": ["weiliang Xu","xueiliang"],
"JobS": "Linux DevOps",
"Age": 25,
"gender": "man"
}
}Bash操作
curl -XPOST -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/weiliang/_update/1?pretty' -d '
{
"doc": {
"name": ["weiliang Xu","xueiliang"],
"JobS": "Linux DevOps",
"Age": 25,
"gender": "man"
}
}'
Delete删除文档
Delete可以指定Document ID删除文档,也可以直接删除索引,删除索引,索引内的文档都随之被删除。
#Kibana操作
DELETE /weiliang/_doc/1 #删除指定文档
DELETE /weiliang #删除索引Bash操作
curl -XDELETE -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/weiliang/_doc/1?pretty'
curl -XDELETE -u elastic:26tBktGolYCyZD2pPISW -H "Content-Type:application/json" 'http://192.168.31.215:9201/weiliang?pretty'
Bulk API 批量操作
1.支持在一次API调用中,对不同索引进行操作
2.支持四种操作 Index、Create、Update、Delete
3.可以在 URI 中指定 Index,也可以在请求的 Playoad 中进行
4.操作中单条语句操作失败,不会影响后续操作
5.返回结果包含了每一条的执行结果
#Kibana操作
POST _bulk
{ "create" : { "_index" : "bulk_index", "_id" : "1" } } //创建了索引为 bulk_index ,id为1的文档
{ "Job" : "Linux Ops" } //文档内容为字段 "Job" 值 "Linux Ops"
{ "delete" : { "_index" : "bulk_index", "_id" : "2" } } //删除索引为 bulk_index 中 id 为 2的文档,因为我们暂时还没有 id 为2的文档,所以此次执行返回 not_found,但是不影响后续语句执行
{ "update" : { "_id": "1", "_index" : "bulk_index" } } //增量更新了 bulk_index 中 id 为 1 的文档,注意这里的写法是 _id 在前,_index 在后
{ "doc" : {"name" : "xuweiliang"} }
{ "index" : {"_index" : "bulk_index", "_id" : "1" } } //Index方式操作了 bulk_index 索引的 id 为 1 的文档,把文档内容改了如下
{ "name" : "xuweiliang" }
{ "create" : { "_index" : "bulk_index", "_id" : "2" } } //在 bulk_index 索引中 创建了一个 id 为 2 的文档
{ "name" : "xuweiliang" , "Age" : 25 }
{ "delete" : { "_index" : "bulk_index", "_id" : "2" } } //删除了 bulk_index 索引中 id 为 2的文档
使用 bulk api 批量操作的每条语句都会进行返回结果,如下
MGET 批量读取
Elasticsearch中提供了 mget 批量读取的方式,批量操作,减少了网络连接所产生的开销。提高性能
GET _mget
{
"docs":[ //docs为mget格式
{
"_index": "bulk_index", //指定要读取文档的索引
"_id" : 1 //指定读取文档的ID
},
{
"_index": "bulk_index", //同一索引内的不同ID联合读取
"_id" : 2
},
{
"_index": "index", //不同索引中的不同ID联合读取
"_id" : 1
}
]
}
结果如下:
MSEARCH 批量查询
msearch全称 Multi Serach API是一个可以进行条件匹配查询的语法
GET /<index>/_msearch
介绍 mserach官方解释说从单个API中获取多个搜索结果,请求的格式类似于批量API格式,并使用换行符分隔的JSON(NDJSON)格式。最后一行数据必须以换行符 \n 结尾。每个换行符前面都可以有一个回车符 \r。向此端点发送请求时,Content-Type标头应设置为application/x-ndjson
路径参数 (可选,字符串)索引名称的逗号分隔列表或通配符表达式,用于限制请求。
请求主体
1.aggregations聚合 (可选,对象)指定聚合。
2.from 来自 (可选,整数)起始文档偏移量。预设为0。
3.max_concurrent_searches同时最多查询 (可选,整数)指定多重搜索API将执行的并发搜索的最大数量,此默认值基于数据节点的数量和默认搜索线程池大小。
4.max_concurrent_shard_requests (可选,整数)指定每个子搜索请求将在每个节点上执行的并发分片请求的最大数量。此参数应用于保护单个请求,以防止集群过载(例如,默认请求将命中集群中的所有索引,如果每个节点的分片数量很高,则可能导致分片请求被拒绝)。默认为5。在某些情况下,并发请求无法实现并行性,因此这种保护将导致性能下降。例如,在仅期望很少数量的并发搜索请求的环境中,可能有助于将该值增加到更大的数目。
5.preference (可选,字符串)指定应该对其执行操作的节点或分片。默认为随机。
6.query (可选,查询对象)使用查询DSL定义搜索定义。
7.routing (可选,字符串)以指定的主分片为目标。
8.search_type (可选,字符串)搜索操作的类型。可用选项:
query_then_fetch
dfs_query_then_fetch
9.size (可选,整数)要返回的点击数。默认为10。
响应正文 responses (数组)包括与原始多重搜索请求中的顺序匹配的每个搜索请求的搜索响应和状态代码。如果特定搜索请求完全失败,error则将返回带有消息和相应状态代码的对象,代替实际的搜索响应。
实例 标头部分包括要搜索的一个或多个索引,search_type,首选项和路由。该正文包括典型的搜索正文请求(包括查询,聚合,来源,大小等)。
$ cat requests
{"index" : "test", "index"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "test", "search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}
{"query" : {"match_all" : {}}}
{"search_type" : "dfs_query_then_fetch"}
{"query" : {"match_all" : {}}}
常见错误返回
问题 | 原因 |
无法连接 | 网络故障或集群挂了 |
连接无法关闭 | 网络故障或节点出错 |
429 | 集群过于繁忙 |
4xx | 请求体格式错误 |
500 | 集群内部错误 |
来源:马哥Linux运维
https://mp.weixin.qq.com/s/qZq_EV9q1LUUzOZeTzhA-g
Elasticsearch基本CURD操作语法讲解的更多相关文章
- PID控制器的数字实现及C语法讲解
PID控制器的数字实现及C语法讲解 概述 为方便学习与交流,根据自己的理解与经验写了这份教程,有错误之处请各位读者予以指出,具体包含以下三部分内容: (1) PID数字化的推导过程(实质:微积分的近 ...
- ElasticSearch+Kibana 索引操作
ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...
- ElasticSearch之 控制相关度原理讲解
控制相关度 相关度评分背后的理论 如何计算评分的 Lucene 使用布尔模型(Boolean model) 查找匹配文档 并主要的借鉴了 词频/逆向文档频率(term frequency/invers ...
- MySQL 的 CURD 操作
0. 说明 CURD 操作通常是使用关系型数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的 CURD 定义了用于处理数据的基本原子操作 CURD 代表创 ...
- innobackupex 相关语法讲解【转】
innobackupex 相关语法讲解 连接服务器 The database user used to connect to the server and its password are speci ...
- 轻量级ORM框架Dapper应用二:使用Dapper实现CURD操作
在上一篇文章中,讲解了如何安装Dapper,这篇文章中将会讲解如何使用Dapper使用CURD操作. 例子中使用到的实体类定义如下: using System; using System.Collec ...
- ElasticSearch之CURL操作(有空再去整理)
https://www.cnblogs.com/jing1617/p/8060421.html ElasticSearch之CURL操作 CURL的操作 curl是利用URL语法在命令行方式下工 ...
- TP中CURD操作
CURD操作 CURD操作也就是模型操作数据表的基本操作.C(Create).U(Update).R(Read).D(Delete)操作就是增删改查操作. 6.1.增加操作 回想一下在mysql中增加 ...
- Laravel框架中的数据库CURD操作、连贯操作、链式操作的用法
Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...
随机推荐
- 「APIO2015」巴邻旁之桥 Palembang Bridges
贪心 先转化一下题意 首先如果一个人的家和办公室在河同一侧那么建桥的时候不用去考虑它,最终把答案加上即可 在河两侧的家和办公室互换不影响答案,那么可以把这个抽象到一个区间$[l,r]$,距离就是$|l ...
- [Codeforces 580D]Fizzy Search(FFT)
[Codeforces 580D]Fizzy Search(FFT) 题面 给定母串和模式串,字符集大小为4,给定k,模式串在某个位置匹配当且仅当任意位置模式串的这个字符所对应的母串的位置的左右k个字 ...
- Android NurReaderView 阅读器 (字符串-.txt文件)
有些地方还没配置好.2/3天后在更新.... 功能 支持字符串和<.txt>文件 文字自动分各个页面 支持从右到左-(从右边开始的语言.比如维吾尔语哈扎克语...外国的阿拉伯语等) 支持自 ...
- fidder 学习
前提 你要清楚下面两个问题的答案 1.接口是什么? 2.抓包是什么? 在提一嘴 想要获取手机上的时时请求 首先要把手机和电脑连接同一个网络 也就是在同一频道上 开始 1.安装 Fidder Every ...
- php之4个坐标点判断是否为矩形和正方形
代码 <?php $a=[0,0]; $b=[0,1]; $c=[1,1]; $d=[1,0]; $ar=array($a,$b,$c,$d); $a1=[]; // 0 1 2 3 forea ...
- python的各版本的不同
Python的版本主要分为 2.× . 3.× 两个系列. Python3计划每年发布一个新的子版本,一次只增加一两种新语法. 使用时当然选择越新的Python版本越好,版本越老的代码越难维护. 维护 ...
- leetcode45:maximum depth of binary tree
题目描述 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量. Given a binary tree, find its maximum depth. The ma ...
- 内网渗透 day3 -metasploit的使用
metasploit的使用 目录 一.msf基本操作 1 二.msf模块(比较重要的四个) 2 三.木马生成 2 四.开启监听模块(最常用的模块) 3 一.msf基本操作 1. 使用msfconsol ...
- tp5 删除图片以及文件
控制器调用 /** * [delimg 删除单张图片] * @return [type] [description] */ public function delimg(){ if (request( ...
- OxyPlot组件的基本使用
在制作上位机的时候,很多时候需要使用到监控绘图界面,使用来绘制曲线的组件有很多,GDI+.char.OxyPlot等等,这篇文章用来介绍OxyPlot组件的基本应用,在本文中主要是利用随心数生成函数结 ...