一、Kibana 介绍
Kibana 是一款开源的数据分析和可视化平台,用于和 Elasticsearch 协作。通过 Kinaba 可以对 Elasticsearch 索引中的数据进行搜索、查看、交互操作,可以很方便的利用图标、表格、地图对数据进行多元化的分析和呈现。
Kibana 可以使数据界面化,基于浏览器的界面可让我们快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。
二、Kibana 安装和使用
2.1 下载和安装
# 下载与使用的 elasticsearch 对应的 kibana 版本
docker pull docker.io/kibana:5.6.8
# 安装 kibana 容器
# ELASTICSEARCH_URL 指定要监听和统计的ES
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.234.135:9200 --name kibana --restart=always -p 5601:5601 kibana:5.6.8
2.2 测试
# 访问页面
192.168.234.135:5601
三、DSL 语句
DSL 可以帮助我们直接操作 elasticsearch 库中的数据
打开 kibana 的 Dev Tools,建议在 firefox 浏览器打开,它对中文的兼容性更好
# 获取所有索引库信息
GET _cat/indices?v
# 删除索引库
DELETE /userinfo
# 新增索引库
PUT /userinfo
# 添加映射
PUT /user/testinfo/_mapping
{
"properties": {
"name": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"city": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"age": {
"type": "long",
"store": false
},
"description": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
}
}
}
# 新增文档数据
# /【索引】/【索引库】/【第几个】
PUT /user/testinfo/1
{
"name": "小黄",
"age": 18,
"city": "北京",
"description": "北京的小黄歌"
}
PUT /user/testinfo/2
{
"name": "小美",
"age": 18,
"city": "北京",
"description": "北京的小美"
}
PUT /user/testinfo/3
{
"name": "李明",
"age": 18,
"city": "北京",
"description": "北京的大哥"
}
# 获取数据
GET /user/testinfo/1
GET /user/testinfo/2
GET /user/testinfo/3
# 直接替换数据,原始数据会被删除
PUT /user/testinfo/1
{
"name": "老大"
}
# 修改数据
POST /user/testinfo/1/_update
{
"doc": {
"name": "隔壁老王"
}
}
# 删除数据
DELETE /user/testinfo/3
# 查询数据
GET /user/_search
GET /user/testinfo/_search
GET /user/testinfo/2
# Sort 排序
# 根据 age 降序
Get /user/_search
{
"query": {},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
# 分页
Get /user/_search
{
"query": {},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 2
}
################# 过滤搜索
# 词项搜索
GET /user/testinfo/_search
{
"query": {
"term": {
"city":"北京"
}
}
}
# 多个词项搜索
GET /user/_search
{
"query": {
"terms": {
"city": [
"北京",
"武汉"
]
}
}
}
# 范围过滤
# gte 大于等于 gt 大于
# lte 小于等于 lt 小于
GET /user/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 40
}
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
# 查询存在address域的数据
GET /user/_search
{
"query": {
"exists": {
"field": "address"
}
}
}
############ 多条件搜索
# must:多条件必须同时满足,等同于 and
# must_not:多个条件必须同时不满足
# should:至少有一个条件满足,等同于or
# 搜索在深圳的用户,且年龄在10-30之间
GET /user/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"city": {
"value": "深圳"
}
}
},
{
"range": {
"age": {
"gte": 10,
"lte": 30
}
}
}
]
}
}
}
##### 根据某个字符搜索
GET /user/_search
{
"query": {
"match": {
"description": "湖北武汉"
}
}
}
# 搜索前缀
GET /user/_search
{
"query": {
"prefix": {
"name": "赵"
}
}
}
# 多个域匹配
# description|city 有深圳的数据
GET /user/_search
{
"query": {
"multi_match": {
"query": "深圳",
"fields": [
"city",
"description"
]
}
}
}