笔记来源 → B站学习视频:最新ElasticSearch6实战教程。
视频评论里有人说是照本宣科,学到最后只会ctrl+c。我看了几篇,也有这种感觉。后来自己找了点文字资料,中文的资料零零散散,读英文文献我又不行,而且存在理解上的歧义。折腾一番后,我还是决定跟着视频一步一步的学。
以下笔记是本人看视频过程中的手打总结,前面基础内容使用的是抽象的参数名称,使用的时候请自行修改。笔记编号是根据视频编号标记的。笔记顺序根据内容有微调。
我第一次是在win10上安装的,视频介绍的是虚拟机的安装,所以这一部分没有写笔记。需要学习安装的可以自行在网上搜索。后来,我又在linux上安装了一次,遇到很多问题,有缘的话后续补上。
另外,es6+系列和es7+系列有很多区别,未来有机会再研究8。
目录
1. es的概述 + 22.23. 集群分片的tips
1. 什么是mapping?
2. restful风格
12. 36. bulk批量操作 + 格式解析
* 一个小实例
es内的存储主要由以下部分组成。mapping相当于index的设置,包含doc的详细信息,比如type、field。约等于数据库里字段的详情。mapping的基本介绍在视频14。
类比 | /index | /type | /document |
---|---|---|---|
es | 索引 | 类型 | 文档 |
数据库 | database/库 | table/表 | 一条数据 |
* 视频中的primary shard就是指的分片。replica指的是分片的副本。
* 集群分片的tips
分片 primary shard 和副本 replica shard 不能在同一个节点上,相同的副本也不能在同一个节点上。
若只有一个节点,则无法创建副本,集群状态为yellow(亚健康)。
集群中增加节点时,es会自动创建之前未分配的replca shard。
(1)指定分片
PUT /mauanx
{
"settings":{
// 分片数
"number_of_shards":3,
// 每个分片的副本数
"number_of_replicas":1
}
}
(2)查看集群状态
GET _cat/health
// green (健康
// yellow(亚健康
// red (不健康
* 关于es的分片问题可以参考:Elasticsearch之如何合理分配索引分片
* 其他关于es的基础介绍, 可以参考:Elasticsearch学习,请先看这一篇
ES6+的mapping可以设置属性,格式为 "属性" : "属性值" ,支持的几个常用属性如下:
1 |
"store" |
: |
false(默认)-- 没有存储,只能搜索,不能获取值。 true -- 因存储而从_source字段中分离,可搜索并获取值。 |
2 |
"index" |
: |
false -- 不分词。 true -- 分词。 |
3 |
"analyzer" |
: |
"ik" -- 指定分词器,默认为:standard analyzer。 |
4 |
"boost" |
: |
1.23 -- 字段级别的分数加权,默认为:1.0。 |
5 |
"ignore_above" |
: |
100 -- 超过100个字符的文本将会被忽略,不被索引。 |
6 |
"search_analyzer" |
: |
"ik" -- 搜索时使用的分词器,默认为:standard analyzer。 |
es6使用的就是restful风格,总结一下就是下面这张表。
http请求 | get | post | put | delete |
curd动作 | 查 | 增 | 改 | 删 |
这里随便贴一篇文章供新手参考:使用RESTful风格开发Java Web
(1)bulk的格式
语句分为 两行,第一行放指令, 第二行放数据。
{action:{metadata}}
{requestbody}
其中:
action(行为) | ① create:文档不存在时创建文档;文档存在时操作失败,提示文档已存在。 ② update:更新文档。 ③ index:创建新文档或替换已有文档,与create相比,文档存在时直接修改,不会有提示。 ④ delete:删除一个文档。 |
metadata(元数据) | 元数据可指定_index, _type, _id,也可在http请求中指明。 |
json格式:耗费内存,需要转换成响应的对象,操作复杂。
bulk现有格式,分割简单,可以减小java虚拟机的开销。
(2)批量操作
添加 | ① |
|
"errors": false -- 添加成功 true -- 添加失败 |
② | |
||
获取
|
|
||
修改 | ① |
|
|
② | |
||
删除 |
|
增删改可放在同一个http请求下一起执行。
// 增、改、删
POST /index/type/_bulk
{"create":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"}
{"index":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"}
{"delete":{"_index":"索引值","_type":"类型值","_id":"id值"}}
(1) 创建索引、类型
① 可以用head工具创建:
② 使用kibana创建index、mapping、type:
index为mauanx,type为user(es5以下的版本中,一个indexe中可以有多个type;s6中一个index只有一个type,为过渡阶段;到es7时已经取消了type。),id我手写的1-6。
_source包括四个:①name:姓名(文本);②age:年龄(数值)③sex:性别(文本)④interests:兴趣(后续我存放的是文本数组)。
// 创建索引
PUT mauanx
// 创建索引的mapping、type为user
PUT /mauanx/_mapping/user
{
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"sex":{
"type": "text"
}
"interests":{
"type": "text"
}
}
}
或者:
PUT /mauanx // 创建索引mauanx、type为user
{
"settings":{
// 5个分片
"number_of_shards":5,
// 1个副本
"number_of_replicas":1
},
"mappings":{
"user":{
"properties":{
"name": {
"type": "text"
},
"age": {
"type": "integer"
},
"sex":{
"type": "text"
}
"interests":{
"type": "text"
}
}
}
}
}
(2)批量插入数据:
在索引mauanx、类型为user 下插入6条数据。
POST /mauanx/user/_bulk
{"create":{"_index":"mauanx","_type":"user","_id":1}}
{"name":"Abbey","age":20,"sex":"female","interests":["sing","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":2}}
{"name":"Barbara","age":21,"sex":"female","interests":["climb trees","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":3}}
{"name":"Cindy","age":22,"sex":"female","interests":["sleep","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":4}}
{"name":"Daisy","age":19,"sex":"female","interests":["play games","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":5}}
{"name":"Ella","age":20,"sex":"female","interests":["sing","cook"]}
{"create":{"_index":"mauanx","_type":"user","_id":6}}
{"name":"Fitch","age":23,"sex":"male","interests":["sing","play ball"]}