elasticsearch封装了lucene并封装了restful api用于操作;
192.168.56.5:9200是我的elasticsearch部署得服务器及端口,换成自己的即可。
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 查询所有索引信息
put类型的请求可以向elasticsearch发送并存储数据,需要携带ID
该请求中,索引为customer,类型为external,数据ID为1,数据字段值在请求体中
put带ID保存,第一次会创建数据,后面在发送就会根据id更新数据
发送成功后,返回
在执行一次后返回
可以看到,ID任然保持不变,第二次执行后,_version版本发生了迭代,并且result由created变成了updated
post类型请求不需要携带ID信息,也可以携带ID,如果携带ID,post类型请求,每次都会将数据作为一条新数据保存到elasticsearch中,并生成一个ID返回,如果携带了ID则与put类型请求一致,第一次插入,后续都是更新
发送请求如下
返回结果中,多了一个他自己生成得ID,并且result是created
再发送一次后返回结果如下,两次返回的数据中ID不一样,且result都是created
再post请求后,添加_update参数可以更新数据,这里得更新,elasticsearch会做判断,如果数据发生变动,会执行更新,如果没有变化,则不会执行更新,注意这里要更新的内容,需要用doc属性给他包裹起来
返回如下,result为updated,version和seq_no都发生了迭代
此时,我们再执行这个请求,seq_no和version都不会变化,result会返回一个noop,即no operation
插入更新得时候,可以再后面携带参数,会对符合查询条件得数据进行操作
插入更新会有一个_seq_no得字段,每次操作都会递增,可以根据这个字段来处理数据的并发问题
eg:发送请求修改数据,指定更新id为1得数据,seq_no为primary_term为1
此时如果没有符合条件的数据就会报错
查询指定索引类型下的指定ID得数据
返回结果如下,如果没找到数据得话,found就会返回一个false
通过delete请求可以删除索引和文档
删除文档,delete请求url中直接跟上索引名称,类型名称和文档id
返回结果
删除索引,delete请求url中直接跟上索引名称
返回结果
操作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": "马"}
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,输入命令
插入的action可以使用index和create
执行结果如下均操作成功,took标识使用了426毫秒,errors为false标识没有错误,我们发送了四条数据,返回的items中,有每条数据的执行情况
更新可以使用index,也可以使用update
使用delete操作