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格式的请求主体

Elasticseearch基本查询语句

//查看_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请求方式主体说明CreatePUT/index/_create/id指定Document ID,创建文档,如果ID已存在,则失败CreatePOST/index/_create/id指定Document ID,创建文档,如果ID已存在,则失败CreatePOST/index/_doc自动生成ID,不会重复,重复提交则创建多个文档,文档版本都为1IndexPUT/index/_doc/id如果ID不存在,则创建新的文档,如果ID存在,则删除现有文档后创建新的文档,版本+1,ID相同IndexPOST/index/_doc/id如果ID不存在,则创建新的文档,如果ID存在,则删除现有文档后创建新的文档,版本+1,ID相同ReadGET/index/_doc/id查看Document ID为1的文档UpdatePOST/index/_doc/id文档必须存在,否则更新失败,只能增量修改字段,不能减少字段,字段值可以随意修改,版本加1DeleteDelete/index/_doc/id文档必须存在,否则删除返回"not_found"DeleteDelete/index删除索引,索引内的文档也会被随之而删除,要删除的索引必须存在,否则返回 "404"。

Create创建索引及文档

Create一个文档时,Elasticsearch支持自动生成文档ID和指定文档ID两种方式。

  1. 通过调用 POST /index/_doc 语法,系统自动生成文档Document ID。此种方法,即使创建的JSON文档重复,Document ID也不一致,如果重复使用POST多次提交,Elasticsearch将会创建多个内容重复但ID不一致的文档。
  2. 通过调用 POST /index/_create/idPUT /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请求方式,分别是 POSTPUT,这种请求方法通过调用 /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. 支持四种操作 IndexCreateUpdateDelete
  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的文档

MGET 批量读取

Elasticsearch中提供了 mget 批量读取的方式,批量操作,减少了网络连接所产生的开销。提高性能

实例

展开阅读全文

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java