本接你能学到什么?
官网对Elasticsearch的介绍有一条是:分布式、RESTFul风格的搜索和分析,这就说明我们可以通过RESTFul风格接口请求获取数据及信息,使用postman工具即可模拟对应的接口请求
GET /_cat/nodes 查看所有节点
GET /_cat/health 查看es健康状况
GET /_cat/master 查看主节点
GET /_cat/indices 查看所有索引(类似于mysql的show databases)
对比关系型数据库,创意索引约等于创建数据库
PUT请求 服务器ip:端口/索引名称
例: PUT请求 http://localhost:9200/customer
{"acknowledged": true,"shards_acknowledged": true,"index": "customer"
}
如上图中返回数据含义:
acknowledged返回true表示创建成功
index表示我们的索引名称
shards_acknowledged有没有足够的空间分配
注意:因为put操作保证了幂等性,所以当索引存在的时候,在新增便会提示已存在。
查看刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成GET请求即可
例: GET请求 http://localhost:9200/customer
{"customer": {"aliases": {},"mappings": {},"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","provided_name": "customer","creation_date": "1668756661340","number_of_replicas": "1","uuid": "w-egUMVFSZqB4kYoWHlbEA","version": {"created": "7120199"}}}}
}
删除刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成DELETE请求即可
例: PUT请求 http://localhost:9200/customer
{"acknowledged": true
}
语法:PUT或POST请求 /索引名/类型/id
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
翻译成mysql的意思:保存在哪个数据库的哪张表下,
在customer索引下的external类型下保存1号数据为:PUT请求 customer/external/1
同样POST操作也是能够保存的,POST请求 customer/external/1
{"_index": "customer","_type": "external","_id": "1","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1
}
PUT和POST的相同与不同:
相同点:
两者都支持对数据的保存和修改
即:当put请求时,如果有数据,则更新;没有数据,则新增 当post请求时,如果携带了id,则修改;如果没有携带,则新增
不同点:
PUT必须携带后面的id,POST可以不携带后面的id
即:put请求如果不携带id则会报错405,不允许操作
除了上面创建文档时可以根据id参数是否携带完成更新,我们还有常规的更新文档操作。
语法:POST 请求 /索引名/类型/id/_update
POST请求: customer/external/1/_update
从下方返回数据的result字段的返回值noop可以看出数据是没有做任何操作的;如果修改了,则_version会增加,result会更改为updated
{"_index": "customer","_type": "external","_id": "1","_version": 1,"result": "noop","_shards": {"total": 0,"successful": 0,"failed": 0},"_seq_no": 0,"_primary_term": 1
}
与创建文档修改的比较:
相同点:在更新值,新增字段时,都会完成正常的更新操作不同点:_update修改的时候,会对比原来的数据,如果与原来一样,就什么都不会操作(version、seq_no全部不变的),而新增修改的时候,则不会比对,每次都会进行真正的修改
语法;GET请求 /索引/类型/id
GET请求 /customer/external/1
{"_index": "customer","_type": "external","_id": "1","_version": 3,"_seq_no": 2,"_primary_term": 1,"found": true,"_source": {"doc": {"name": "sbdk1"}}
}
留个小小的问题:
我们看到返回结果中有_seq_no和_primary_term两个字段,是干什么用的?大家可查询一下, 有任何问题,欢迎在评论区留言交流
语法:
DELETE请求 /索引名/类型/id
DELETE请求 /索引名
DELETE请求 /customer/external/1
{"_index": "customer","_type": "external","_id": "1","_version": 4,"result": "deleted","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 3,"_primary_term": 1
}
总体来说,索引与文档的基本操作没有多复杂,基本就是更改一下请求方式和请求内容即可完成。大家跟着文章多敲几遍即可学会。
不要忘了文中所留下的小提问哦!
欢迎大家关注我的工种昊 《coder练习生》
上一篇:【代码阅读】MSC-VO