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概念

  映射是定义文档及其包含的字段的存储和索引方式的过程。例如,使用映射来定义:

  1. 应将哪些字符串字段视为全文字段.
  2. 哪些字段包含数字,日期或地理位置.
  3. 日期值的格式.
  4. 用于控制动态添加字段的映射的自定义规则.

映射实例讲解

创建索引时可以指定映射

PUT my_index   ①
{ 
  "mappings":{ 
    "properties":{  ②
      "title":{"type":"text"}  ③
      "name":{“type":"text"},  ④
      "age":{“type":"integer"},  ⑤
      "created":{ 
        "type":"date",  ⑥
        "format":"strict_date_optional_time || epoch_millis"
      } 
    } 
  } 
}
  1. 创建一个名为的索引my_index.
  2. 指定映射中的字段或属性.
  3. 指定该title字段包含text值.
  4. 指定该name字段包含text值.
  5. 指定该age字段包含integer值.
  6. 指定该created字段包含date两种可能格式的值.
  7. mappingsproperties是不可以修改的.固定格式

创建实例

就用之前小视频的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"
            }
        }
    }
}

结果

Last modification:February 18th, 2020 at 10:27 pm