目录
一、Rest风格说明
Restful其实是一种软件架构风格 ,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
ElasticSearch也提供了一套完善的Restful风格API供我们使用,基本Rest命令说明如下表所示:
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 通过文档id查询文档 |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
二、索引基本操作
(1)、创建索引
【a】创建索引:同时指定属性的类型
PUT /user
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"hobby": {
"type": "text"
},
"birthDay": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
}
回到elasticsearch head插件中查看索引,如下图:
可以看到我们成功创建了一个索引名称为"user"的索引。
如上创建索引index(数据库):user,type(表):_doc,field(字段):name(姓名,文本类型)、age(年龄,数字类型)、hobby(兴趣,文本类型)、birthDay(生日,时间类型,格式是yyyy-MM-dd HH:mm:ss)
前面的示例中我们看到指定了字段的类型,通常常见的类型如下:
- 字符串类型
text、keyword - 数值类型
long,integer,short,btye,double,float,half float,scaled float - 日期类型
date - 布尔值类型
boolean - 二进制类型
binary
如果自己的文档字段没有指定,那么es就会给我们默认配置字段类型。
如果需要在创建索引的时候,执行分片的一些设置。
- number_of_shards:每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
- number_of_replicas:每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
- 例如,我们可以创建只有一个主分片,没有副本的小索引:
PUT /member
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
查看索引信息:
更改副本数量:
PUT /member/_settings
{
"number_of_replicas": 2
}
再次查看索引信息:
可以看到,副分片的数量已经成功修改为2。
【b】往索引中插入数据
在es中,往索引中插入数据就类似于我们在关系型数据库中往数据库中插入记录一样。下面我们插入三条数据到user索引中:
PUT /user/_doc/1
{
"name": "姚明",
"age": 30,
"interests": "打篮球",
"birthDay": "2010-01-01 15:00:00"
}
PUT /user/_doc/2
{
"name": "刘德华",
"age": 50,
"interests": "唱歌",
"birthDay": "2000-01-01 20:00:00"
}
PUT /user/_doc/3
{
"name": "刘翔",
"age": 40,
"interests": "跑步",
"birthDay": "1990-01-01 10:00:00"
}
可以看到成功插入三条记录。
【c】修改数据
es修改数据有两种方法:
- 第一种方法:提交还是使用PUT进行覆盖
下面我们将user索引里面的文档ID为1的记录的name进行修改:
PUT /user/_doc/1
{
"name": "姚明2",
"age": 30,
"interests": "打篮球",
"birthDay": "2010-01-01 15:00:00"
}
修改完成之后,查看索引中的数据:
可以看到,数据成功被修改,以上就是使用覆盖的方式修改数据。
- 第二种方法:发送POST请求
修改语法要求:
POST /索引名称/类型名称/文档id/_update
{
//请求体
}
POST /user/_doc/1/_update
{
"doc": {
"name": "姚明 - 姚明"
}
}
修改完成之后,查看索引的数据:
可以看到,索引中的数据成功被修改。
【d】删除索引
通过DELETE命令实现删除,根据你的请求来判断是删除索引还是删除文档记录。
先来创建多两个索引并插入两条数据:
PUT /user2/_doc/1
{
"name": "张三",
"age": 30
}
PUT /user2/_doc/2
{
"name": "李四",
"age": 20
}
- 删除文档记录
DELETE /user2/_doc/2
可以看到,id为2的文档记录已经成功删除。
- 删除索引库
DELETE user2
可以看到,索引库成功被删除,如下图:已经不存在user2索引库。
【e】查看索引情况
通过get _cat/xxx 命令可以获得es的当前很多信息。
GET /_cat/health
列出所有索引及存储大小:
GET /_cat/indices?v
- pri :primary缩写,主分片数量;
- rep :副分片数量;
- docs.count: Lucene 级别的文档数量;
- docs.deleted: 删除的文档;
- store.size: 全部分片大小(包含副本);
- pri.store.size: 主分片大小;
【f】查看集群的健康情况
GET _cluster/health
通过上面的命令来获取整个集群的状态,这个状态只能被 master node 所改变。
es 通过三种颜色来表明集群的建康程度
- Green : 主分片与副本都分配正常;
- Yellow : 主分片全部正常分配,有副本分片未能正常分配;
- Red :有主分片未能分配;例如:当服务器磁盘容量超过85%时,去创建一个新的索引;
【g】查看节点列表
GET /_cat/nodes?v
三、总结
本篇文章主要总结了Elasticsearch提供的Restful API,并且通过示例详细介绍了如何创建索引、往索引中插入数据并且修改、删除文档数据等,更多相关命令可以参考官方文档进行学习。由于笔者水平有限,文中可能有不对之处,还望小伙伴们指正,相互学习,一起进步!