es和kibana
elasticsearch和kibana的docker安装和使用介绍
1、elasticsearch的介绍
与mysql对比
mysql | es |
---|---|
数据库(database) | 索引(index) |
表(table) | _type(类型)在版本6.0.0中已过期 |
2、elasticsearch和kibana的安装
#### 1、compose文件
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.0
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
volumes:
- es-data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:7.15.0
ports:
- "5601:5601"
environment:
- "elasticsearch.hosts=http://elasticsearch:9200"
- "xpack.monitor.ui.container.elasticsearch.enabled=true"
- "i18n.locale=zh-CH"
depends_on:
- elasticsearch
volumes:
es-data:
执行 docker compose -f installES-Kibana up -d
3、查询
1、索引文档
添加
PUT /customer/_doc/1
{
"name":"john"
}
搜索
GET /customer/_doc/1
2、批量插入
下载数据,批量导入,数据目录 /usr/local/test/accounts.json
curl -H "Content-Type/application/json" -X POST "127.0.0.1:9200/bank/_bulk?pretty&refresh" --data-binary "@/usr/local/test/accounts.json"
查看导入状态
curl "127.0.0.1:9200/_cat/indices?v=true" | grep bank
3、查询所有数据
GET /bank/_search
{
"query":{"match_all":{}},
"sort":[
{"account_number":"asc"}
]
}
查询结果字段解释
token
:查询所耗费的时间(毫秒为单位)timeout
:搜索请求是否超时_shards
:搜索了多少个碎片,以及成功、失败、跳过了多少个碎片细目分类max_score
:找到的相关文档的分数hits.total.value
:找到了多少个匹配的文档hits.sort
:文档排序位置(不安相关性得分排序时)hits.score
:文档的相关性得分(使用match_all时不适用)
4、分页查询
GET /bank/_search
{
"query":{"match_all":{}},
"sort":[
{"account_number":"asc"}
],
"from":10,
"size":10,
}
5、指定字段查询
GET /bank/_search
{
"query":{"match":{"address":"mill lane"}},
}
- 注意: 由于es底层是按照分词索引的,所以上述查询的结果是address字段中含有mill或者lane的数据
6、查询段落匹配
如果我们希望的是查询的字段address中包含mill lane时
GET /bank/_search
{
"query":{"match_phrase":{"address":"mill lane"}}
}
7、多条件查询bool
查询年龄为40且不住在爱德华州的
GET /bank/_search
{
"query":{
"bool":{
"must":[{
"match":{"age":"40"}
}],
"must_not":[{
"match":{"state":"ID"}
}]
}
}
}
8、查询条件 query or filter
GET /bank/_search
{
"query":{
"bool":{
"must":[{"match":{"state":"ND"}}],
"filter":[{"term":{"age":"40"}},{"range":{"balance":{"gte":20000,"lte":30000}}}]
}
}
}
注意:query和filter的区别
- 相同点: 两者都可以写查询
- 不同点:query的上下文条件是用来给文档打分的,匹配的越好,_score分越高,filter条件只产生两种结果,符合和不符合,后者被过滤掉
只看含有filter的查询
GET /bank/_search
{
"query":{
"bool":{
"filter":[
{"term":{"age":"40"}},{"range":{"balance":{"lte":30000,"gte":20000}}}
]
}
}
}
注意:会发现查询结果中hits._score的值为0.0
4、聚合查询
在sql中有group by, 在elasticsearch中叫aggregation(聚合查询)
1、简单聚合
计算出每个州中account的数量,使用aggs关键字对state字段进行聚合,被聚合的字段无需对分词统计,所以使用state.keyword对整个字段统计
GET /bank/_search
{
"size":0,
"aggs":{
"group_by_state":{
"terms":{
"field":"state.keyword"}
}
}
}
因为无需返回条件的具体数据,所以size=0
2、嵌套聚合
es还可以处理多个聚合条件的嵌套
接上个例子,计算每个州的平均结余,就是在state分组的基础上计算avg(balance)
GET /bank/_search
{
"size":0,
"aggs":{
"group_by_state":{
"terms":{
"field":"state.keyword"
},
"aggs":{
"average_balance":{
"avg":{
"field":"balance"
}
}
}
}
}
}
3、对聚合结果排序
继续上个例子,对avg(balance)进行排序
GET /bank/_search
{
"size":0,
"aggs":{
"group_by_state":{
"terms":{
"field":"state.keyword",
"order":{"average_balance":"desc"}
},
"aggs":{
"average_balance":{
"avg":{
"field":"balance"
}
}
}
}
}
}
5、对索引的基本使用
查看索引的状态指令
curl localhost:9200/_cat/indices?v | grep user
1、创建索引
PUT /test-index-users
{
"settings":{
"number_of_shards":1,
"number_of_replicas":1
},
"mappings":{
"properties":{
"name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"age":{
"type":"long"
},
"remarks":{
"type":"text"
}
}
}
}
注意:单机模式下无法创建副本,所以当number_of_replicas
值不为零时,索引的状态为yellow,当把该值设置为零时,该索引状态为绿色
2、对索引添加数据
POST /test-index-users/_doc
{
"name":"潘丽萍",
"age":20,
"remarks":"what"
}
3、修改索引的设置
PUT /test-index-users/_settings
{
"settings":{
"number_of_replicas":0
}
}
4、关闭索引
POST /test-index-users/_close
注意:索引关闭后不能再进行数据的插入和查询
5、打开索引
POST /test-index-users/_open
6、索引模板
模板介绍
模板类型:组件模板和索引模板
- 组件模板:可重用的构建块,用于配置映射、设置和别名,不会直接应用于一组索引
- 索引模板:是包含组件模板的集合,也可以直接指定映射、设置和别名
索引模板中的优先级
- 可组合模板优先于旧模板,如果没有可组合模板匹配给定索引,旧模板仍然可以匹配并应用