RESTFUL风格API
GET
获取资源,相当于相当于MySql中的SELECT
POST
更新资源,相当于相当于MySql中的UPDATE
PUT
创建资源,相当于相当于MySql中的CREATE
DELETE
删除资源,相当于MySql中的DELETE
HEAD
仅用于获取资源的基础信息
非结构化索引
创建
在ElasticSearch-head插件中点击索引,新建索引
创建成功后可以在概述也就是head的首页看到
分片数
分片数在创建的时候默认是5.可以从图中看出来0,1,2,3,4就是我们的5个分片.官方推荐分片数是节点数的1.5~3倍之间.
副本数
创建的时候默认是1.比如video_1的2是加粗的.这就是主分片.在vudeo_2中有个没有加粗的就是他的一个副本.
结构化索引
映射Mapping概念
映射是定义文档及其包含的字段的存储和索引方式的过程。例如,使用映射来定义:
- 应将哪些字符串字段视为全文字段.
- 哪些字段包含数字,日期或地理位置.
- 日期值的格式.
- 用于控制动态添加字段的映射的自定义规则.
映射实例讲解
创建索引时可以指定映射
PUT my_index ①
{
"mappings":{
"properties":{ ②
"title":{"type":"text"} ③
"name":{“type":"text"}, ④
"age":{“type":"integer"}, ⑤
"created":{
"type":"date", ⑥
"format":"strict_date_optional_time || epoch_millis"
}
}
}
}
- 创建一个名为的索引
my_index
. - 指定映射中的字段或属性.
- 指定该title字段包含
text
值. - 指定该name字段包含
text
值. - 指定该age字段包含
integer
值. - 指定该created字段包含
date
两种可能格式的值. mappings
和properties
是不可以修改的.固定格式
创建实例
就用之前小视频的video表来做演示
CREATE TABLE `video` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '视频名称',
`cat_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '视频板块,在配置目录中',
`image` varchar(200) NOT NULL DEFAULT '' COMMENT '视频封面',
`url` varchar(200) NOT NULL DEFAULT '' COMMENT '视频URL本地',
`type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '视频类型',
`content` text NOT NULL COMMENT '视频简介',
`uploader` int(10) NOT NULL DEFAULT '0' COMMENT '上传作者',
`video_id` varchar(100) NOT NULL DEFAULT '' COMMENT '阿里云OSS',
`video_duration` int(5) NOT NULL DEFAULT '0' COMMENT '阿里OSS',
`create_time` int(10) unsigned NOT NULL DEFAULT '0',
`update_time` int(10) unsigned NOT NULL DEFAULT '0',
`status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '视频状态-1:已删除,0:禁止播放,1:正常',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8
创建索引
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"cat_id": {
"type": "integer"
},
"image": {
"type": "text"
},
"url": {
"type": "text"
},
"type": {
"type": "byte"
},
"content": {
"type": "text"
},
"uploader": {
"type": "keyword"
},
"create_time": {
"type": "integer"
},
"update_time": {
"type": "integer"
},
"status": {
"type": "byte"
},
"video_id": {
"type": "keyword"
}
}
}
}
错误-1
直接点击提交报错信息
{
"error":{
"root_cause":[
{
"type":"parsing_exception",
"reason":"Unknown key for a START_OBJECT in [mappings].",
"line":1,
"col":13
}
],
"type":"parsing_exception",
"reason":"Unknown key for a START_OBJECT in [mappings].",
"line":1,
"col":13
},
"status":400
}
因为我们没有选择索引.就相当于没有use database
一样.我们在http://localhost:8101/后面添加上索引(自己命名)
http://localhost:8101/small_video/
错误-2
再次请求报错
{
"error":"Incorrect HTTP method for uri [/small_video/] and method [POST], allowed: [PUT, GET, DELETE, HEAD]",
"status":405
}
因为我们是创建所以选择PUT
.结果创建成功
{
"acknowledged":true,
"shards_acknowledged":true,
"index":"small_video"
}
之前说过默认分片数是5.副本是1.结果我的默认都是1.没有关系.我们创建的时候指定一下分片数和副本数就好了.选择DELETE
.删除之前创建的small_video
索引.我们在创建语句mappings
前面追加
"settings": {
"number_of_shards": 12,#分片个数,在创建索引不指定时 默认为 5;
"number_of_replicas": 1 #数据副本,一般设置为1;
},
完整创建语句
{
"settings":{
"number_of_shards":5,
"number_of_replicas":1
},
"mappings":{
"properties":{
"name":{
"type":"text"
},
"cat_id":{
"type":"integer"
},
"image":{
"type":"text"
},
"url":{
"type":"text"
},
"type":{
"type":"byte"
},
"content":{
"type":"text"
},
"uploader":{
"type":"keyword"
},
"create_time":{
"type":"integer"
},
"update_time":{
"type":"integer"
},
"status":{
"type":"byte"
},
"video_id":{
"type":"keyword"
}
}
}
}