ELK简介
1. ElasticSearch: 分布式数据搜索引擎,用于全文搜索 //存储+搜索
2. Logstach : 数据收集引擎
3. Kibana: 提供分析平台和可视化的web平台,帮助汇总,分析和搜索数据日志 // 数据展现工具
ElasticSearch结构
ES6.0之后,一个索引只有一个type(一个数据库中只有一个表)
关系型数据库(mysql) | 非关系型数据库(ElasticSearch) |
数据库Database | 索引index |
表Table | 类型type |
数据行Row | 文档Document |
数据列Column(字段) | 字段Field |
约束Schema | 映射Mapping |
ES状态查看
- 查看节点健康状态
http://192.168.1.102:9200/_cat/health?v
- 查看节点列表
http://192.168.1.102:9200/_cat/nodes?v
- 查看索引列表(相当于查看数据库)
http://192.168.1.102:9200/_cat/indices?v
Kibana
- Discover:用于数据查询工具
- Visualize:生成图标
- Dashboard:将生成的表放入到仪表盘中
- Timelion: 实时性数据对比
- APM:集群检测平台工具
- Dev Tools:开发者工具(开发常用)
ES索引操作(对数据库操作)
创建索引
完整语法:
curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>
- kibana会自动进行省略,帮助简化操作
curl -XPUT 'hadoop102:9200/index'
在Dev Tools中会自动进行省略
==》PUT /index
查询索引
PUT /index
GET /index
删除索引
DELETE /index
ES数据库分片和副本
默认情况下,创建索引时会有5个数据分片,每个分片默认一个副本
工具查看分片和副本情况
- 通过下图可以看出,默认情况下index会有5个分片,每个分片一个副本
文档相关操作
添加文档(相当于mysql中的一行数据)
POST /index/student/1
{
"name":"wangyg",
"age":25
}
查询
GET /index/student/1
更新操作
POST /index/student/1/_update
{
"doc":{
"name":"dilireba"
}
}
删除
DELETE index/student/1
ES文档查询
文档查询的两种操作风格
- REST查询风格(使用URL方式发送请求)
- REQUEST BODY:(使用请求体方式)
REST风格查询
索引查询语法
常用:
GET /index/student/_search //查询指定索引的文档
GET /index,index1/_search //查询多个索引的文档
GET /in*/_search //类似模糊查询
泛查询
GET test12/_search?q=tom
df:指定字段
GET test12/_search?q=tom&df=name
指定字段查询
GET test12/_search?q=name:tom
term查询
GET /test12/_search?q=username:tom jack
//相当于or的关系,只要满足其中一个即可
phrase查询
GET /test12/_search?q=username:"tom jack"
//查询满足这个单词需要的即可
排序查询
GET test12/_search?q=tom&sort=age:asc //升序查询
//desc降序查询
查询时间
GET test12/_search?q=tom&df=user&timeout=1s //超过的超时时间限制
操作符语法
AND :与
OR :或
NOT:非
+ :must
- :must_not
范围查询:[] ==>ex: [1 TO 10]
通配符查询: ?:1个字符
* :多个字符
近似度查询fuzzy query//模糊查询 :name:le~1
group查询:通过( ) 进行分组
GET test12/_search?q=username:(tom OR jack) AND lee
查询的执行计划查看
- Mysql的执行计划
1. 解析mysql语法 --解析mysql语法
2. 逻辑执行计划表--形成一个逻辑执行计划表
3. 对逻辑执行计划表优化--优化
4. 生成物理执行计划
5. plan 执行
- ES查看的执行计划
GET test12/_search?q=tom
{
"profile":true
}
request body方式查询
普通方式查询
GET test12/_search
{
"query":{
"match": {
"username": {
"query":"tom jack"
"operator":"and" //可以增加operator控制单词间的关系
}
}
}
}
minimum_should_match参数可以控制需要匹配的单词数
GET test12/_search
{
"query":{
"match": {
"username": {
"query":"tom jack",
"operator":"and",
"minimum_should_match":3
}
}
}
}
倒排索引
索引:可以理解为搜索的引导目录
正排索引:mysql中通过索引记录的地址值,直接将数据获取到
倒排索引:将一行内容,进行分词,放入分词表,(分词表中形式为类似于 key,id ),查询时,先进入索引区查找,找到多个id,==》通过词key,找到id,再继而找到具体内容