本接你能学到什么?
- Elasticsearch节点信息的操作
- 索引的创建、查询、删除
- 文档的创建、查询、修改、删除
官网对Elasticsearch的介绍有一条是:分布式、RESTFul风格的搜索和分析,这就说明我们可以通过RESTFul风格接口请求获取数据及信息,使用postman工具即可模拟对应的接口请求
初步检索
1、_cat 协助我们查看节点信息
GET /_cat/nodes 查看所有节点
GET /_cat/health 查看es健康状况
GET /_cat/master 查看主节点
GET /_cat/indices 查看所有索引(类似于mysql的show databases)
索引操作
1、创建索引
对比关系型数据库,创意索引约等于创建数据库
PUT请求 服务器ip:端口/索引名称
例: PUT请求
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "customer"
}
如上图中返回数据含义:
acknowledged返回true表示创建成功
index表示我们的索引名称
shards_acknowledged有没有足够的空间分配
注意:因为put操作保证了幂等性,所以当索引存在的时候,在新增便会提示已存在。
2、查看索引
查看刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成GET请求即可
例: GET请求
{
"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"
}
}
}
}
}
3、删除索引
删除刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成DELETE请求即可
例: PUT请求
{
"acknowledged": true
}
文档操作
1、创建文档
语法: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,不允许操作
2、更新文档
除了上面创建文档时可以根据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全部不变的),
而新增修改的时候,则不会比对,每次都会进行真正的修改
3、查询文档
语法;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两个字段,是干什么用的?大家可查询一下, 有任何问题,欢迎在评论区留言交流
4、删除文档
语法:
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
}
总结
总体来说,索引与文档的基本操作没有多复杂,基本就是更改一下请求方式和请求内容即可完成。大家跟着文章多敲几遍即可学会。