elasticsearch基础--restful风格操作

Updated on with 0 views and 0 comments

一、基础API

elasticsearch封装了lucene并封装了restful api用于操作;

192.168.56.5:9200是我的elasticsearch部署得服务器及端口,换成自己的即可。

1.1 获取基础数据

http://192.168.56.5:9200/_cat/health 查询节点健康状况

http://192.168.56.5:9200/_cat/master 查看主节点信息

http://192.168.56.5:9200/_cat/nodes 查询所有节点信息

http://192.168.56.5:9200/_cat/indices 查询所有索引信息

1.2 post和put类型请求插入更新数据

1.2.1 put类型请求

put类型的请求可以向elasticsearch发送并存储数据,需要携带ID

该请求中,索引为customer,类型为external,数据ID为1,数据字段值在请求体中

put带ID保存,第一次会创建数据,后面在发送就会根据id更新数据

image.png

发送成功后,返回

image.png

在执行一次后返回

image.png

可以看到,ID任然保持不变,第二次执行后,_version版本发生了迭代,并且result由created变成了updated

1.2.2 post类型请求

post类型请求不需要携带ID信息,也可以携带ID,如果携带ID,post类型请求,每次都会将数据作为一条新数据保存到elasticsearch中,并生成一个ID返回,如果携带了ID则与put类型请求一致,第一次插入,后续都是更新

发送请求如下

image.png

返回结果中,多了一个他自己生成得ID,并且result是created

image.png

再发送一次后返回结果如下,两次返回的数据中ID不一样,且result都是created

image.png

1.2.3 通过_update更新数据

再post请求后,添加_update参数可以更新数据,这里得更新,elasticsearch会做判断,如果数据发生变动,会执行更新,如果没有变化,则不会执行更新,注意这里要更新的内容,需要用doc属性给他包裹起来

image.png

返回如下,result为updated,version和seq_no都发生了迭代

image.png

此时,我们再执行这个请求,seq_no和version都不会变化,result会返回一个noop,即no operation

image.png

1.2.4 参数处理

插入更新得时候,可以再后面携带参数,会对符合查询条件得数据进行操作

插入更新会有一个_seq_no得字段,每次操作都会递增,可以根据这个字段来处理数据的并发问题

eg:发送请求修改数据,指定更新id为1得数据,seq_no为primary_term为1

image.png

此时如果没有符合条件的数据就会报错

1.3 get请求查询数据

查询指定索引类型下的指定ID得数据

image.png

返回结果如下,如果没找到数据得话,found就会返回一个false

image.png

1.4 delete请求删除数据

通过delete请求可以删除索引和文档

删除文档,delete请求url中直接跟上索引名称,类型名称和文档id

image.png

返回结果

image.png

删除索引,delete请求url中直接跟上索引名称

image.png

返回结果

image.png

1.5 _bulk批量操作

1.5.1 基础语法

操作action跟上要操作的目标metadata,换行后跟上操作的实际文档数据,如果发送请求的时候,请求路径中没有索引,类型信息,则需要在metadata中声明,注意action和requestbody里的内容不要换行

{ action: { metadata }}
{ request body        }
{ action: { metadata }}
{ request body        }

路径中包含索引信息的示例

POST /customer/external/_bulk
{"index": {"_id": 1}}
{"id":1, "name": "龙"}
{"index": {"_id": 2}}
{"id":2, "name": "欢"}
{"index": {"_id": 3}}
{"id":3, "name": "文"}
{"index": {"_id": 4}}
{"id":4, "name": "马"}

路径中不含索引信息的示例

POST /_bulk
{"index": {"_index":"customer","_type":"external","_id": 1}}
{"id":1, "name": "龙"}
{"index": {"_index":"customer","_type":"external","_id": 2}}
{"id":2, "name": "欢"}
{"index": {"_index":"customer","_type":"external","_id": 3}}
{"id":3, "name": "文"}
{"index": {"_index":"customer","_type":"external","_id": 4}}
{"id":4, "name": "马"}

1.5.2 action类型

  • create 如果文档不存在就创建,但如果文档存在就返回错误
  • index 如果文档不存在就创建,如果文档存在就更新
  • update 更新一个文档,如果文档不存在就返回错误
  • delete 删除一个文档,如果要删除的文档id不存在,就返回错误
POST _bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

进入到kibana的dev tools,输入命令

1.5.3 批量插入

插入的action可以使用index和create

image.png

执行结果如下均操作成功,took标识使用了426毫秒,errors为false标识没有错误,我们发送了四条数据,返回的items中,有每条数据的执行情况

image.png

1.5.4 批量更新

更新可以使用index,也可以使用update

image.png

1.5.5 批量删除

使用delete操作

image.png


标题:elasticsearch基础--restful风格操作
作者:wenyl
地址:http://www.wenyoulong.com/articles/2023/08/01/1690859849561.html