一、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"
]
}
}
}