kibana對Elasticsearch做增刪改查操作,以及一些聚合查詢
kibana是一個視覺化平臺,設計出來用於和Elasticsearch一起使用的。你可以用kibana搜尋、檢視、互動存放在Elasticsearch索引裡的資料。
準備工作:Elasticsearch啟動完畢,elasticsearch-head啟動完畢 kibana 啟動完畢
然後訪問http://localhost:5601,點選Dev Tools,就是以下圖片的介面.
然後我們就可以對Elasticsearch做增刪改查資料的操作了
1.先新增索引也就是資料庫的庫名
PUT test_data { "settings": { "index":{ "number_of_shards":5, "number_of_replicas":1 } } }
新增成功,會在Elasticsearch-head 中檢視是否多出來一個索引
2.繼續新增型別和資料
#test_data索引名稱,相當於資料庫名稱
#product 型別,相當於資料庫的表名
#1就是要儲存資料的id,不寫的話預設給一個長字串
PUT test_data/product/1
{
"name":"華為電腦",
"address":"深圳",
"price":9600,
"creat_time":"2019-01-02"
}
Elasticsearch-head就有資料了
3.修改某個欄位的資料
#修改 POST test_data/product/3/_update { "doc":{ "price":5835 } }
4.刪除一條記錄
#刪除
DELETE test_data/product/3
5.刪除index,刪除整個庫
#刪除索引
DELETE test_data
6. 獲取設定資訊
GET test_data/_settings
7.獲取所有的設定
GET _all/_settings
這樣一個簡單的增刪改查就弄好了
接下來用新增好的資料做一些簡單的聚合分析,一些統計,求最大數,最小數,平均值等等
1.根據商品名稱計算每個商品數量
#計算每種電腦有多少數量 GET test_data/product/_search { "size": 0, "aggs": { "group_by_name": { "terms": { "field": "name.keyword" } } } } #size:只獲取聚合結果,而不執行聚合原始資料 #aggs:固定語法,要對一份資料執行分組聚合操作 #group_by_name:就是對每個aggs,都要起一個名字,這個名字是隨機的,你隨便取什麼都ok #terms:根據欄位的值進行分組 #field:根據指定的欄位的值進行分組
對返回的資料分析
hits.hits:指定了size是0,所以hits.hits為空,否則會把執行聚合的那些原始資料給你返回回來
aggregations:聚合結果 group_by_name:我們指定的某個聚合的名稱
buckets:根據我們指定的field劃分出的buckets key:每個bucket對應的那個值
doc_count:這個bucket分組內,有多少個數據 預設的排序規則:按照doc_count降序排序
2.計算北京地區,統計地址的數量
#計算北京地區,統計地址的數量
GET test_data/product/_search
{
"size": 0,
"query": {
"match": {
"address": "深圳"
}
},
"aggs": {
"all_names": {
"terms": {
"field": "address.keyword"
}
}
}
}
返回的資料
3.計算每個商品下的平均價格/最小价格/最大價格/總價
#計算北京地區,統計地址的數量
GET test_data/product/_search
{
"size": 0,
"aggs": {
"group_by_names":{
"terms": {"field": "name.keyword"},
"aggs": {
"avg_price":{"avg": {"field": "price"}},
"min_price":{"min": {"field": "price"}},
"max_price":{"max": {"field": "price"}},
"sum_price":{"sum": {"field": "price"}}
}
}
}
}
#count:buckets,terms,自動就會有一個doc_count,就相當於是count
#avg:avg aggs 求平均值
#max:求一個bucket內,指定field值最大的那個資料
#min:求一個bucket內,指定field值最小的那個資料
#sum:求一個bucket內,指定field值的總和先分組,再算每組的平均值
返回結果
avg_price:我們自己取的metric aggs的名字
value:我們的metric計算的結果,每個bucket中的資料的price欄位求平均值後的結果
4.計算商品下的平均價格,並且按照平均價格降序排列
collect_mode
對於子聚合的計算,有兩種方式:
- depth_first 直接進行子聚合的計算
- breadth_first 先計算出當前聚合的結果,針對這個結果在對子聚合進行計算。
"order": { "avg_price": "desc" }
#計算商品下的平均價格,並且按照平均價格降序排列
GET test_data/product/_search
{
"size": 0,
"aggs": {
"all_names":{
"terms": { "field": "name.keyword","collect_mode": "breadth_first","order": {
"avg_price": "desc"}},
"aggs": {
"avg_price": {
"avg": {"field": "price"}
}
}
}
}
}
返回結果
5.按照指定的價格範圍區間進行分組,然後在每組內再按照name進行分組,最後再計算每組的平均價格
"ranges": [{},{}]
#按照指定的價格範圍區間進行分組,然後在每組內再按照name進行分組,最後再計算每組的平均價格 ranges:[{}]
GET test_data/product/_search
{
"size": 0,
"aggs": {
"group_by_price":{
"range": {
"field": "price",
"ranges": [
{
"from": 50,
"to": 4000
}
]
},
"aggs": {
"group_by_names": {
"terms": {
"field": "name.keyword"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}
返回結果
6.histogram
類似於terms,也是進行bucket分組操作,接收一個field,按照這個field的值的各個範圍區間,進行bucket分組操作
interval:10,劃分範圍,0~10,10~20,20~30
#histogram
GET test_data/product/_search
{
"size": 0,
"aggs": {
"price":
{
"histogram": {
"field": "price",
"interval": 6000
},
"aggs": {
"revenue": {
"sum": {
"field": "price"
}
}
}
}
}
}
返回結果
7.date histogram
按照我們指定的某個date型別的日期field,以及日期interval,按照一定的日期間隔,去劃分bucket
date interval = 1m, 2017-01-01~2017-01-31,就是一個bucket 2017-02-01~2017-02-28,就是一個bucket
然後會去掃描每個資料的date field,判斷date落在哪個bucket中,就將其放入那個bucket
min_doc_count:即使某個日期interval,2017-01-01~2017-01-31中,一條資料都沒有,那麼這個區間也是要返回的,不然預設是會過濾掉這個區間的
min_doc_count:即使某個日期interval,2017-01-01~2017-01-31中,一條資料都沒有,那麼這個區間也是要返回的,不然預設是會過濾掉這個區間的
GET test_data/product/_search
{
"size": 0,
"aggs": {
"time":{
"date_histogram": {
"field": "creat_time",
"interval": "month",
"format": "yyyy-MM-dd",
"min_doc_count": 0,
"extended_bounds":{
"min":"2019-01-01",
"max":"2019-01-02"
}
}
}
}
}
返回資料
8.global
就是global bucket,就是將所有資料納入聚合的scope,而不管之前的query
GET test_data/product/_search
{
"size": 0,
"query": {
"term": {
"brand": {
"value": "華為電腦"
}
}
},
"aggs": {
"single_brand_avg_price": {
"avg": {
"field": "price"
}
},
"all":{
"global": {},
"aggs": {
"all_brand_avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
#single_brand_avg_price:就是針對query搜尋結果,執行的,拿到的,就是華為電腦的平均價格
#all.all_brand_avg_price:拿到所有品牌的平均價格
返回結果