在查找elasticsearch时,我们可以使用elasticsearch-head进行数据查找,但是由于其功能单一,并且无法生成复杂的统计报表。因此,今天介绍一个能够实现对日志进行实时分析的工具——Kibana。
Kibana是一款开源的数据分析和可视化平台,我们可以使用Kibana对elasticsearch索引中的数据进行搜索、查看和交互,甚至是利用图表及地图的方式对数据进行多元化地分析和呈现。
1. Kibana 5.6.8的下载安装
同样地,我们使用docker进行下载安装。
# 镜像下载,这里需要下载和elasticsearch对应的版本,因为笔者elasticsearch版本为5.6.8,所以这里Kibana版本也是5.6.8
docker pull docker.io/kibana:5.6.8
# 安装kibana容器,并设置为开机自启动
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.137.118:9200 --name kibana --restart=always -p 5601:5601 kibana:5.6.8
访问http://192.168.137.118:5601
2. DSL语句
索引操作
查询所有的索引:GET /_cat/indices?v
删除某个索引:DELETE /user
创建索引:PUT user
或者更详细地配置:
- number_of_shards 分片数量;
- number_of_replicas 副本数量。
PUT user
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
映射操作
添加映射:
PUT user/userinfo/_mapping
{
"properties": {
"name": {
"type": "text",
"analyzer": "ik_smart",
"store": false,
"search_analyzer": "ik_smart"
},
"city": {
"type": "text",
"analyzer": "ik_smart",
"store": false,
"search_analyzer": "ik_smart"
},
"age": {
"type": "long",
"store": false
},
"description": {
"type": "text",
"analyzer": "ik_smart",
"store": false,
"search_analyzer": "ik_smart"
}
}
}
查看映射:GET user/userinfo/_mapping
添加数据
保存一篇文档到索引当中去 (相当于插入一条记录到一个数据库表当中)
PUT user/userinfo/1
{
"name":"张三丰",
"age":32,
"city":"广州",
"description":"加班狂人"
}
保存文档到索引当中,不给id,会自动分配一个id
POST user/userinfo/
{
"name":"洪世贤",
"age":35,
"city":"上海",
"description":"java架构师"
}
查询数据
获取某个索引中某个类型某个id的数据:GET user/userinfo/1
或者GET hello/job/1?_source
获取某个索引中某个类型某个id的某列数据:GET hello/job/1?_source=title
获取某个索引中某个类型某个id的某几列数据:GET hello/job/1?_source=title,city
更新数据
采用的是覆盖的方式进行文档的更新。 执行下面的操作后,发现之前的description列消失了。
PUT user/userinfo/1
{
"name":"李信",
"age":36,
"city":"深圳"
}
如果想要更新某个字段:
POST user/userinfo/1/_update
{
"doc":{
"name":"李信",
"age":36,
"city":"深圳"
}
}
删除数据
删除一条记录:DELETE user/userinfo/1
高级查询
搜索排序:
GET /user/userinfo/_search
{
"query": {
"match_all": {}
},
"sort":{
"age":{
"order": "desc"
}
}
}
分页查询:
GET /user/userinfo/_search
{
"query": {
"match_all": {}
},
"sort":{
"age":{
"order": "asc"
}
},
"from": 0,
"size": 1
}
过滤查询:
term词项搜索主要用于分词精确匹配,如字符串、数值、日期等
GET /user/userinfo/_search
{
"query": {
"term": {
"age":{
"value": 35
}
}
}
}
多个term词项搜索
GET /user/userinfo/_search
{
"query": {
"terms": {
"age": [35, 36]
}
}
}
范围过滤查询:
range过滤允许按照指定范围查找一批数据。
GET /user/userinfo/_search
{
"query": {
"range": {
"age": {
"gte": 30,
"lte": 40
}
}
}
}
exists过滤查询:
查找拥有某个域的数据
GET /user/userinfo/_search
{
"query": {
"exists": {
"field": "description"
}
}
}
bool过滤:
合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:
- must:多个查询条件的完全匹配,相当于and;
- must_not:多个查询条件的相反匹配,相当于not;
- should:至少有一个查询条件匹配,相当于or。
GET /user/userinfo/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"age": 35
}
}
]
}
}
}
查询所有
GET /user/userinfo/_search
{
"query": {
"match_all": {}
}
}
根据某个字符搜索
GET /user/userinfo/_search
{
"query": {
"match": {
"description": "架构"
}
}
}
根据字段前缀查询
GET /user/userinfo/_search
{
"query": {
"prefix": {
"name": {
"value": "洪"
}
}
}
}
根据多个字段查询
GET /user/userinfo/_search
{
"query": {
"multi_match": {
"query": "java",
"fields": [
"name",
"description"
]
}
}
}