Day02-ES集群常见术语,索引管理,文档管理,IK分词器,数据类型映射及kibana环境安装
- 1、昨日内容回顾
- 2、今日内容预告
- 3、ES的常见术语
- 4、索引管理
- 4.1 查看索引
- 4.2 创建索引
- 4.3 修改索引
- 4.4 删除索引
- 4.5 索引别名
- 4.6 关闭索引
- 4.7 打开索引
- 4.8 索引的其他操作
- 4.9 索引规范
- 5、Restful风格程序
- 6、文档的基础操作
- 6.1 创建文档
- 6.2 文档修改
- 6.3 文档的查看
- 6.4 删除文档
- 6.5 文档的批量操作
- 7、使用映射(mapping)自定义数据类型
- 7.1 映射的数据类型
- 7.2 IP案例
- 7.3 date案例
- 7.4 综合案例
- 8、分词器
- 8.1 内置的标准分词器-分析英文
- 8.2 内置的标准分词器-分析中文并不友好
- 8.3 安装IK分词器
- 8.4 自定义IK分词器的字典
- 9、安装kibana集成ES集群
1、昨日内容回顾
-
部署方式:
-
rpm:
redhat , centos, suse
-
二进制部署:
大部分的Linux发行版。
-
-
linux的资源限制
- 查看工具:
ulimit
-
配置文件
/etc/security/limit.d/*.conf
- 查看工具:
-
内核修改
- 查看工具:
sysctl -w|-p|-f|-q
-
配置文件:
/etc/sysctl.d/*.conf
- 查看工具:
-
系统脚本
- 管理工具
systemctl
-
配置文件
systemctl cat es7
- 管理工具
-
排错技巧:
- systemctl status es7 -l
- journalctl -u es7
- tail -100f $ES_HOME/logs/xxx.log- at
- ERROR
-
图形化工具
- elasticsearch head:
作为ES集群的客户端,发起请求。用户只需要在web界面做操作即可。
-
postman:
作为ES集群的客户端,需要使用者发起http请求,一般用于http测试。
- elasticsearch head:
2、今日内容预告
-
ES集群的常见术语
- 索引
- 分片
- 副本
- 文档
-
ES集群的API基础操作
-
DSL查询
-
ES原理篇
3、ES的常见术语
-
索引(index):
- 用户写入ES集群的逻辑单元。
-
分片(shard):
- 一个索引最少一个分片。
- 将索引的数据分布式的存储在ES集群。
-
副本(replica):
- 一个分片可以有0个或多个副本。
- 为同一个分片数据提供数据冗余。
-
文档(docment):
- 实际存储数据的媒介。
- 这些文档存储在分片中。
-
主分片和副本分片的区别:
- 主分片可以用于读写操作(rw)。
- 副本分片仅能用于读取操作(ro)。
-
集群的颜色:
- green
表示所有的主分片和副本分片均正常工作。 - yellow
表示有部分副本分片不正常工作。 - red
表示有部分主分片不正常工作。
- green
4、索引管理
4.1 查看索引
(1)查看所有的索引
curl -X GET 10.0.0.101:9200/_cat/indices
(2)查看单个索引
curl -X GET 10.0.0.101:9200/oldboyedu-linux85-ip
4.2 创建索引
(1)创建默认索引,默认是一个分片和一个副本
curl -X PUT 10.0.0.101:9200/oldboyedu-linux85
(2)创建指定的分片
curl -XPUT 10.0.0.101:9200/oldboyedu-linux86
{"settings":{"number_of_shards": 3}
}
(3)创建指定的分片和副本
curl -XPUT 10.0.0.101:9200/oldboyedu-linux87-003
{"settings":{"number_of_shards": 5,"number_of_replicas":2}
}
4.3 修改索引
(1)修改副本
curl -XPUT 10.0.0.101:9200/oldboyedu-linux87-003/_settings
{"number_of_replicas": 1
}
(2)修改分片,不能修改
curl -XPUT 10.0.0.101:9200/oldboyedu-linux87-003/_settings
{"number_of_shards": 10
}
【文档写入哪个分片编号计算公式: hash(文档ID) % primary_shards_numbers】
4.4 删除索引
(1)删除单个索引
curl -XDELETE 10.0.0.101:9200/oldboyedu-linux87-003
(2)基于通配符删除多个索引
curl -XDELETE 10.0.0.101:9200/oldboyedu-linux87-*
4.5 索引别名
(1)添加索引别名
POST http://10.0.0.101:9200/_aliases
{"actions": [{"add": {"index": "oldboyedu-linux85","alias": "Linux2023"}},{"add": {"index": "oldboyedu-linux86","alias": "Linux2023"}},{"add": {"index": "oldboyedu-linux87","alias": "Linux2023"}}]
}
(2)查看索引别名
GET http://10.0.0.101:9200/_aliases
(3)删除索引别名
POST http://10.0.0.101:9200/_aliases
{"actions": [{"remove": {"index": "oldboyedu-linux87","alias": "Linux2023"}}]
}
(4)修改索引别名
POST http://10.0.0.101:9200/_aliases
{"actions": [{"remove": {"index": "oldboyedu-linux85","alias": "DBA"}},{"add": {"index": "oldboyedu-linux85","alias": "数据库运维工程师"}}]
}
4.6 关闭索引
POST 10.0.0.101:9200/oldboyedu-linux85/_close
4.7 打开索引
POST 10.0.0.101:9200/oldboyedu-linux85/_open
4.8 索引的其他操作
推荐阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html
4.9 索引规范
索引名称不要以“.”开头,“_”开头;以“.”开头表示隐藏索引,“_”开头是系统保留的一些动作处理方法
索引名称不能出现大写,必须小写;
生产环境中禁令避免使用通配符,尤其是删除操作;
5、Restful风格程序
https://www.oldboyedu.com/stadent/1001GET :https://www.oldboyedu.com/stadent/view_1001https://www.oldboyedu.com/stadent/get_1001POST:https://www.oldboyedu.com/stadent/create_1001https://www.oldboyedu.com/stadent/write_1001https://www.oldboyedu.com/stadent/add_1001PUT:https://www.oldboyedu.com/stadent/modify_1001https://www.oldboyedu.com/stadent/update_1001DELTE:https://www.oldboyedu.com/stadent/del_1001https://www.oldboyedu.com/stadent/delete_1001https://www.oldboyedu.com/stadent/remove_1001
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。
REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。
REST首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。
JSON语法:基础数据类型:字符串:"oldboyedu""老男孩IT教育""2022"""数字:012...布尔值:truefalse空值:null高级数据类型:数组:["oldboyedu","沙河",2022,null,true,{"school":"oldboyedu","class":"linux80"}]对象:{"name":"oldboy", "age":40, "address":"北京沙河", "hobby":["Linux","思想课"],"other":null}课堂练习:使用json格式记录你的名字(name),年龄(age),学校(school),爱好(hobby),地址(address)。
6、文档的基础操作
6.1 创建文档
1)不指定文档ID
POST 10.0.0.101:9200/oldboyedu-linux85-student/_doc
{"name": "李文轩","hobby": ["吃鸡","丝袜","rap"]
}
2)指定文档ID
POST 10.0.0.101:9200/oldboyedu-linux85-student/_doc/1001
{"name": "彭斌北京分斌","hobby": ["浏览网站","小电影","熬夜"]
}
6.2 文档修改
1)全量更新
POST 10.0.0.101:9200/oldboyedu-linux85-student/_doc/YhF3SocBX1qpvxZ-PePd
{"name": "李文轩2023"
}
2)局部更新
POST 10.0.0.101:9200/oldboyedu-linux85-student/_doc/1001/_update
{"doc":{"age":20,"hobby":["抽烟","喝酒","烫头"]}
}
6.3 文档的查看
GET 10.0.0.101:9200/oldboyedu-linux85-student/_search
6.4 删除文档
DELTE 10.0.0.101:9200/oldboyedu-linux85-student/_doc/1001
6.5 文档的批量操作
(1)批量创建
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "oldboyedu-linux85-elk"} }
{ "name": "oldboy","hobby":["Linux","思想课"] }
{ "create": { "_index": "oldboyedu-linux85-elk","_id": 1002} }
{ "name": "振亚老师","hobby":["妹子","吃面"] }
{ "create": { "_index": "oldboyedu-linux85-elk","_id": 1001} }
{ "name": "苍老师","hobby":["家庭主妇"] }
{ "create": { "_index": "oldboyedu-linux85-elk"} }
{ "name": "李导","hobby":["骑车","拍小电影"] }
(2)批量修改
POST 10.0.0.101:9200/_bulk
{ "update" : {"_id" : "1001", "_index" : "oldboyedu-linux85-elk"} }
{ "doc" : {"name" : "CangLaoShi"} }
{ "update" : {"_id" : "1002", "_index" : "oldboyedu-linux85-elk"} }
{ "doc" : {"name" : "ZhenYaTeacher"} }
(3)查询文档
POST 10.0.0.101:9200/_mget
{"docs": [{"_index": "oldboyedu-linux85-elk","_id": "1001"},{"_index": "oldboyedu-linux85-elk","_id": "1002"}]
}
(4)批量删除
POST 10.0.0.101:9200/_bulk
{ "delete" : { "_index" : "oldboyedu-linux85-elk", "_id" : "1001" } }
{ "delete" : { "_index" : "oldboyedu-linux85-elk", "_id" : "1002" } }
课堂练习
- 将各组的组员信息写入到ES集群,各组员需要包含以下基础信息
- name
- age
- hobby
- city
7、使用映射(mapping)自定义数据类型
7.1 映射的数据类型
当写入文档时,字段的数据类型会被ES动态自动创建,但有的时候动态创建的类型并符合我们的需求。这个时候就可以使用映射解决。使用映射技术,可以对ES文档的字段类型提前定义我们期望的数据类型,便于后期的处理和搜索.text:全文检索,可以被全文匹配,即该字段是可以被拆分的。keyword:精确匹配,必须和内容完全匹配,才能被查询出来。ip:支持Ipv4和Ipv6,将来可以对该字段类型进行IP地址范围搜索参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping-types.html
7.2 IP案例
(1)创建索引时指定映射关系
PUT http://10.0.0.101:9200/oldboyedu-linux85-ip
{"mappings": {"properties": {"ip_addr": {"type": "ip"}}},"settings": {"number_of_shards":3,"number_of_replicas":0}
}
(2)查看索引的映射关系
GET http://10.0.0.101:9200/oldboyedu-linux85-ip
(3)创建测试数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "oldboyedu-linux85-ip"} }
{ "ip_addr":"192.168.10.101" }
{ "create": { "_index": "oldboyedu-linux85-ip"} }
{ "ip_addr":"192.168.10.201" }
{ "create": { "_index": "oldboyedu-linux85-ip"} }
{ "ip_addr":"172.31.10.100" }
{ "create": { "_index": "oldboyedu-linux85-ip"} }
{ "ip_addr":"10.0.0.222" }
(4)查看IP的网段
GET/POST 10.0.0.101:9200/oldboyedu-linux85-ip/_search
{"query":{"match":{"ip_addr": "192.168.0.0/16"}}
}
7.3 date案例
(1)创建索引时指定映射关系
PUT http://10.0.0.101:9200/oldboyedu-linux85-date
{"mappings": {"properties": {"birthday": {"type": "date","format": "yyyy-MM-dd"}}}
}
(2)查看索引的映射关系
GET http://10.0.0.101:9200/oldboyedu-linux85-date
(3)创建测试数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "oldboyedu-linux85-date"} }
{ "name": "oldboy","birthday": "1991-10-01" }
{ "create": { "_index": "oldboyedu-linux85-date"} }
{ "name": "李导","birthday": "2003-05-01" }
{ "create": { "_index": "oldboyedu-linux85-date"} }
{ "name": "振亚","birthday": "1996-05-01" }
(4)查看年龄,从大到小(注意,比较的是数字,数字大的在下面)
GET/POST 10.0.0.101:9200/oldboyedu-linux85-date/_search
{"sort": { "birthday": "asc"}
}
7.4 综合案例
(1)创建索引
PUT http://10.0.0.101:9200/oldboyedu-linux85-elk-2023
(2)查看索引信息
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023
(3)为已创建的索引修改数据类型
PUT http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_mapping
{"properties": {"name": {"type": "text","index": true},"gender": {"type": "keyword","index": true},"province": {"type": "keyword","index": true},"city": {"type": "keyword","index": false},"email": {"type": "keyword"},"ip_addr": {"type": "ip"},"birthday": {"type": "date","format": "yyyy-MM-dd"}}
}
(4)添加测试数据
POST http://10.0.0.101:9200/_bulk
{ "create": { "_index": "oldboyedu-linux85-elk-2023"}}
{ "name": "吴明昆","gender":"男性的","telephone":"1111111111","province":"广西","city":"北海市","email":"wumingkun@oldboyedu.com","ip_addr":"192.168.25.201","birthday":"1999-04-05"}
{ "create": { "_index": "oldboyedu-linux85-elk-2023"}}
{ "name": "蒋相宇","gender":"女性的","telephone":"222222222","province":"河南","city":"濮阳市","email":"jiangxiangyu@oldboyedu.com","ip_addr":"192.168.15.31","birthday":"2003-09-05","hobby":["抽烟","喝酒","烫头","足疗"]}
(5)查看数据-基于gender-匹配keyword类型
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_search
{"query":{"match":{"gender": "女"}}
}
(6)查看数据-基于name字段搜索-匹配text类型
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_search
{"query":{"match":{"name": "吴"}}
}
(7)查看数据-基于email字段搜索-匹配keyword类型
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_search
{"query":{"match":{"email": "jiangxiangyu@oldboyedu.com"}}
}
(8)查看数据-基于ip_addr字段搜索-匹配ip类型
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_search
{"query": {"match" : {"ip_addr": "192.168.15.0/24"}}
}
(9)查看数据-基于city字段搜索,无法完成,该字段无法被检索
GET http://10.0.0.101:9200/oldboyedu-linux85-elk-2023/_search
{"query":{"match":{"city": "濮阳市"}}
}
8、分词器
8.1 内置的标准分词器-分析英文
GET http://10.0.0.101:9200/_analyze
{"analyzer": "standard","text": "My name is Jason Yin, and I'm 18 years old !"
}温馨提示:标准分词器模式使用空格和符号进行切割分词的。
8.2 内置的标准分词器-分析中文并不友好
GET http://10.0.0.101:9200/_analyze
{"analyzer": "standard","text": "我爱北京天安门!"
}温馨提示:标准分词器默认使用单个汉字进行切割,很明显,并不符合我们国内的使用习惯。
8.3 安装IK分词器
1)创建IK分词器目录
mkdir /oldboyedu/softwares/es7/elasticsearch-7.17.5/plugins/ik
2)解压软件包
cd /oldboyedu/softwares/es7/elasticsearch-7.17.5/plugins/ik
wget http://192.168.15.253/ElasticStack/day02/softwares/elasticsearch-analysis-ik-7.17.5.zipunzip elasticsearch-analysis-ik-7.17.5.zip
rm -f elasticsearch-analysis-ik-7.17.5.zip
3)重启服务
systemctl restart es7
4)测试IK中文分词器
- 测试IK中文分词器-细粒度拆分
GET http://10.0.0.101:9200/_analyze
{"analyzer": "ik_max_word","text": "我爱北京天安门!"
}
- 测试IK中文分词器-粗粒度拆分
GET http://10.0.0.101:9200/_analyze
{"analyzer": "ik_smart","text": "我爱北京天安门!"
}
8.4 自定义IK分词器的字典
(1)进入到IK分词器的插件安装目录
cd /oldboyedu/softwares/es/plugins/ik/config
(2)自定义字典
cat > oldboyedu-linux85.dic <<'EOF'
德玛西亚
艾欧尼亚
亚索
上号
带你飞
贼6
EOF
(3)加载自定义字典
vim IKAnalyzer.cfg.xml
...
<entry key="ext_dict">oldboyedu-linux85.dic</entry>
(4)重启ES集群
systemctl restart es7
(5)测试分词器
GET http://10.0.0.101:9200/_analyze
{"analyzer": "ik_smart","text": "嗨,哥们! 上号,我德玛西亚和艾欧尼亚都有号! 我亚索贼6,肯定能带你飞!!!"
}
9、安装kibana集成ES集群
(1)下载软件包
wget http://192.168.15.253/ElasticStack/day02/softwares/kibana-7.17.5-x86_64.rpm
(2)安装kibana
rpm -ivh kibana-7.17.5-x86_64.rpm
(3)修改kibana配置文件
vim /etc/kibana/kibana.yml
...
# 指定kibana监听的主机地址,默认是localhost。
server.host: "0.0.0.0"# 指定kibana连接ES集群地址
elasticsearch.hosts: ["http://10.0.0.101:9200","http://10.0.0.102:9200","http://10.0.0.103:9200"]# 指定kibana的界面为中文简体,默认是英文。
i18n.locale: "zh-CN"
(4)启动kibana
systemctl enable --now kibana
(5)访问kibana界面
http://10.0.0.103:5601/
今日作业:
(1)完成课堂练习并整理思维导图;
(2)各组收集商品10条信息,对应6中不同类型的商品,要求字段如下:
- item: text代表的是商品的连接。
- title: text代表商品的标题。
- price: double代表商品的价格。
- type: keyword代表商品的类型。- dianZiProducts电子产品- chengRenProducts成人用品- sheChiProducts奢侈品- foodProducts食品- bookProducts书籍- carProducts汽车用品
- group: long代表的组名称。可选择为[1-6]
- auther: text代表采集数据的姓名。
- birthday: date代表作者的出生年月日。
- province: keyword代表的是省份。
- city: keyword代表的是城市。
- remote_ip: ip代表商品的连接服务器IP地址。
初始化:
PUT http://10.0.0.101:9200/oldboyedu-linux85-shopping
{"mappings": {"properties": {"item": {"type": "text"},"title": {"type": "text"},"price": {"type": "double"},"type": {"type": "keyword"},"group": {"type": "long"},"auther": {"type": "text"},"birthday": {"type": "date","format": "yyyy-MM-dd"},"province": {"type": "keyword"},"city": {"type": "keyword"},"remote_ip": {"type": "ip"}}}
}
添加一条测试数据:
{ "create": { "_index": "oldboyedu-linux85-shopping"}}
{"item":"https://item.jd.com/100021537415.html","title":"大疆 DJI Mini 3 Pro (DJI RC 带屏遥控器版) Pro 级迷你航拍机 智能跟随飞行器 专业无损竖拍 大疆无人机","price":5788.00,"type":"electronic product","group":1,"auther":"王磊","birthday":"2000-02-07","province":"河南","city":"洛阳","remote_ip":"211.144.24.221"}