天天看點

ES操作 Kibana操作ES入門練習 ES花式查詢說明:個人學習練習【筆記】而已,文檔中所有指令都經過練習實際操作。版本都是7.7.0,後續再發java操作ESELK相關叢集配置ELK相關學習更新以及常見問題記錄Kibana操作ES

說明:個人學習練習【筆記】而已,文檔中所有指令都經過練習實際操作。版本都是7.7.0,後續再發java操作ES

ELK相關叢集配置

ELK相關學習更新以及常見問題記錄

Kibana操作ES

基本知識

基本指令

指令 字段 含義
PUT /索引名稱/類型名稱/文檔ID 建立文檔(指定文檔ID)
POST /索引名稱/索引類型 建立文檔(随機文檔ID)
POST /索引名稱/類型名稱/文檔id/_update 修改文檔
DELETE /索引名稱/類型名稱/文檔id 删除文檔/或者索引
GET /索引名稱/類型名稱/文檔id 查詢文檔通過文檔ID
POST /索引名稱/類型名稱/_search 查詢所有資料

基本資料類型

字元串類型 數值類型 日期(納秒) 布爾值類型 二進制類型 範圍類型
text keyword byte short integer long float double half_float scaled_float date(date_nanos) boolean binary range

複雜資料類型

數組類型 對象類型 嵌套類型
array object nested

地理資料類型

地理點類型 地理形狀類型
geo-point geo-shape

特殊資料類型很多,這裡記錄兩種

計數資料類型 IP類型
token_count ip (IPv4 和 IPv6 位址)

指令練習

練習基礎資料

建立一個索引庫和索引規則并指定字段類型

PUT /crazy
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "long"
      },
      "birth": {
        "type": "date"
      },
      "desc": {
        "type": "text"
      },
      "tag": {
        "type": "text"
      }
    }
  }
}

           

建立一些測試資料

POST /crazy/_doc
{"name":"瘋子","age":23,"birth":"1997-06-06","desc":"瘋子學elk來了","tag":["JAVA","帥哥","HTML","暖男","看書"]}
POST /crazy/_doc
{"name":"小傻子","age":20,"birth":"2000-12-20","desc":"傻子不愛吃蘋果","tag":["遊戲","直播","直男","渣男","旅遊"]}
POST /crazy/_doc
{"name":"張張三","age":5,"birth":"2015-02-20","desc":"張三5歲了,他也不愛吃蘋果","tag":["萌寶","遊戲","小暖男","睡覺","玩具"]}
POST /crazy/_doc
{"name":"李四","age":50,"birth":"1970-04-25","desc":"李四50歲了,她愛吃香蕉,是個老太太","tag":["老人","聽戲","散步","睡覺","老太婆"]}
POST /crazy/_doc
{"name":"王五五","age":30,"birth":"1990-09-25","desc":"王五愛吃蘋果,還學java,也愛吃香蕉","tag":["直男","技術宅","睡覺","聽音樂","大佬"]}
           

常用狀态檢視

擷取索引的規則具體資訊

GET /crazy
           

健康值

【_cat指令可以檢視es的很多資訊】

GET _cat/health
           

版本資訊

GET _cat/indices?v
           

文檔資料基本操作

★關鍵字總結:

字段類型差別:
  1. keyword

    字段不會被分詞器解析
    • 不分詞,直接索引。【支援:模糊、精确查詢,支援聚合】
  2. text

    字段會被分詞器解析
    • 先分詞,然後進行索引。【支援:模糊、精确查詢,不支援聚合】
查詢關鍵字差別:
  1. term

    查詢時直接通過反向索引指定的詞條進行精确查找的【多用于精确值查找】
  2. match

    會使用分詞器解析【先分析文檔,然後通過分析的文檔進行查詢】【多用于模糊值查找】
bool值關鍵字差別:是|或|否
  1. must

    必須:所有條件都要符合
  2. should

    或者
  3. must_not

    不等于

查詢一條資料 1

直接指定索引/類型/{id}
GET crazy/_doc/A-pYKXMB85eJEC73q2LL
           

查詢一條資料 2

精确查找nam叫瘋子的,兩個查詢都能查到
GET /crazy/_doc/_search
{
  "query":{
    "term":{
      "name":"瘋子"
    }
  }
}
GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "name":"瘋子"
    }
  }
}
           

查詢一條資料 3

這裡用模糊查詢name字段不會有結果

因為name字段是keyword類型,不會被分詞,是以下面的練習都用模糊查詢其他字段

GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "name":"瘋"
    }
  }
}
           

查詢所有資料

使用請求體和關鍵字

_search

查詢
GET crazy/_search
{
  "query": {
    "match_all": {}
  }
}
           

添加一條資料(随機ID)

{
  "name": "小七",
  "age": 10,
  "birth": "2010-08-21",
  "desc": "小七是個淘氣鬼,天天就愛搗亂",
  "tag": [
    "國小生",
    "搗亂",
    "睡覺",
    "打遊戲",
    "淘氣"
  ]
}
           

更新資料put【不推薦】

更新剛才小七的

id

容易出現資料滞空(沒有更新到的字段會空)

put是覆寫是更新,版本号屬性會發生改變

PUT /crazy/_doc/BuqTLHMB85eJEC73D20H
{
  "name":"小小七七",
  "desc":"不知道如何形容"
}
           

更新資料post【推薦】

POST /crazy/_doc/BuqTLHMB85eJEC73D20H/_update
{
  "doc":{
    "desc":"小七很頑皮,也很帥"
  }
}
           

直接删除一條資料(根據id)

DELETE /crazy/_doc/BuqTLHMB85eJEC73D20H
           

删除索引/或文檔

DELETE /crazy
DELETE /crazy/_doc
           

複雜查詢

模糊查詢

例如:select * from table a where a.desc like “%蘋果%”

這裡的

desc

字段類型是

text

,此類型字段會被分詞器解析

使用關鍵字

match

查詢,會使用分詞器解析,先分析文檔,然後通過分析的文檔進行查詢*
GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "desc":"蘋果"
    }
  }
}
           

結果過濾

_source

上面的查詢出來的字段太多了,隻要展示name、age、desc即可

關鍵字

_source

與請求體關鍵字

query

同級,逗号分隔,參數為數組
GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "desc":"蘋果"
    }
  },
  "_source":["name","age","desc"]
}
           

結果排序

sort

上面的結果例子:根據年齡升序

關鍵字

sort

與請求體關鍵字

query

同級,逗号分隔,參數為數組對象
GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "desc":"蘋果"
    }
  },
  "_source":["name","age","desc"],
  "sort":[{
    "age":{
      "order":"asc"
    }
  }]
}
           

分頁

from\size

要求:查詢所有資料,每頁2條資料,展示第2頁

關鍵字:

  1. from

    從第幾個開始,下标0是第一個
  2. size

    查詢多少條資料
  3. 都與

    query

    同級,逗号分隔
GET crazy/_search
{
  "query": {
    "match_all": {}
  },
  "from": 2,
  "size": 2
}
           

bool條件查詢

查詢age=20歲并且desc有愛字的
  1. bool-must必須同時滿足多個條件,條件内部可使用

    match/term

    ,這裡用的

    desc有愛age=20

    ,是并且關系
  2. must

    -

    should

    -

    must-not

    與或非條件内部為數組對象,每個條件都需要單獨的=={ }==括起來
GET /crazy/_doc/_search
 {
   "query": {
     "bool": {
       "must":[
         {
           "match": {
             "desc": "愛"
           }
         },
         {
           "term": {
             "age": "20"
           } 
         }
       ]
     }
   }
 }
           
查詢age=30或者tag标簽有男字的
  1. bool-should 或許滿足某個條件,條件内部可使用

    match/term

    ,這裡用的

    tag有男age=30

    ,是或者關系
  2. must

    should

    must-not

    與或非條件内部為數組對象,每個條件都需要單獨的=={ }==括起來,
GET /crazy/_doc/_search
{
 "query": {
   "bool": {
     "should": [
       {
         "term": {
           "age": "30"
         }
       },
       {
         "match": {
           "tag": "男"
         }
       }
     ]
   }
 }
}
           
查詢年齡必須不等于30歲和desc沒有香蕉的
bool-should 必須不等于某些條件,條件内部可使用

match/term

,這裡用的

tag有男age=30

,條件内部是與關系,意思這些條件都不能被滿足
GET /crazy/_doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "age": "30"
          }
        },
        {
          "match": {
            "desc": "香蕉"
          }
        }
      ]
    }
  }
}
           

filter過濾器查詢

查詢10<=age>=30,desc有蘋果或者香蕉的
  1. 這裡的

    desc或者

    可以用match多條件查詢,空格分隔,都滿足的靠前展示
  2. 這裡

    filter

    是指過濾器,對上面的must結果進行過濾
  3. filter-range-lt-gt解釋:

    range範圍過濾

    gt>=

    lt<=

GET /crazy/_doc/_search
{
  "query": {
    "bool": {
      "must":[
        {
          "match": {
            "desc": "蘋果 香蕉"
          } 
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10, 
            "lte": 30
          }
        }
      }
    }
  }
}
           

高亮查詢

查詢desc有蘋果或者香蕉的,并将蘋果香蕉高亮
  1. ES支援大概3種高亮方式:

    plain highlighter

    fast vector highlighter

    posting highlighter

  2. Plain Highlighter為預設高亮,這裡學習用預設的。
  3. 這裡的測試資料查詢結果為蘋果香蕉字段預設添加

    <em> </em>

    HTML标簽
GET /crazy/_doc/_search
{
 "query": {
   "match":{
     "desc":"蘋果 香蕉"
   }
 },
 "highlight":{
   "fields":{
     "desc":{}
   }
 }
}
           
  1. 修改上面的預設标簽方式,這裡修改為p标簽并指定class屬性和行内元素顔色屬性
  2. pre_tags

    :字首,``post_tags`:字尾
GET /crazy/_doc/_search
{
 "query": {
   "match":{
     "desc":"蘋果 香蕉"
   }
 },
 "highlight":{
   "pre_tags": "<p class='key' style='color:red'>",
   "post_tags":"</p>",
   "fields":{
     "desc":{}
   }
 }
}

           

聚合查詢基本操作

類似與sql的分組group by

格式:

"aggs" : {                  	     // 聲明聚合操作
    "aggs_name" : {          // 聚合名,可以自定義
        "aggs_type" : {       // 聚合類别比如sum,max,min,avg等等
            aggs_body         // 聚合體
        },
        "aggs" : {				 // 父子關系嵌套的另一個聚合,與上一個聚合逗号分隔
        "aggs_name"{
        	 "aggs_type" : { 
        		"aggs_body "
        	}
        } 
    },
    "aggs" : {					// 兄弟關系嵌套的另一個聚合,與上一個聚合逗号分隔
        "aggs_name"{
        	 "aggs_type" : { 
        		"aggs_body "
        	}
        }  					
    }
}
           
desc字段有蘋果的人的平均年齡
  1. avg_age自定義傳回平均值的名字
  2. avg 要做的聚合操作這裡是求平均值,還有max,min等等
  3. field指定按什麼字段進行聚合操作
  4. query-match模糊查詢desc字段
GET /crazy/_doc/_search
{
  "query":{
    "match":{
      "desc":"蘋果"
    }
  },
  "aggs": {
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  }
}
           

花式查詢大集合:

條件1:1<

age

>=30

條件2:

tag

包含男/遊戲

條件3:

desc

包含蘋果

條件4:高亮展示

tag

字段查詢内容,并自定義标簽

條件5:年齡

age

升序排序

條件6:格式化生日日期yyyy-MM-dd

條件7:計算結果的年齡統計資訊

ageStats

條件8:統計:0<age<=20歲分段統計,20<age<=50歲分段統計文檔資訊

ageRanges

條件9:統計:20年之内出生的有多少人

birthCounts

條件10:統計:30年内出生的年齡最小的是多少歲

ageMinCounts

條件11:統計:年齡每隔5歲統計直方圖聚合資訊

histogram

等間距劃分

ageHistogram

條件12:統計:按固定時間段統計(年/月等等,這裡用年)

birthDateHistogram

GET crazy/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "desc": "蘋果"
          }
        },
        {
          "match": {
            "tag": "男 遊戲"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gt": 1,
            "lte": 30
          }
        }
      }
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "highlight": {
    "pre_tags": "<p cleaa='key' style='color:red'>",
    "post_tags": "</p>",
    "fields": {
      "tag": {}
    }
  },
  "aggs": {
    "ageStats": {
      "stats": {
        "field": "age"
      }
    },
    "ageRanges": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 1,
            "to": 21
          },
          {
            "from": 21,
            "to": 51
          }
        ]
      }
    },
    "birthCounts": {
      "date_range": {
        "field": "birth",
        "format": "yyyy-MM-dd",
        "ranges": [
          {
            "from": "now-20y",
            "to": "now"
          }
        ]
      }
    },
    "birthMixCounts": {
      "date_range": {
        "field": "birth",
        "format": "yyyy-MM-dd", 
        "ranges": [
          {
            "from": "now-30y",
            "to": "now"
          }
        ]
      },
      "aggs": {
        "ageMinCounts": {
          "min": {
            "field": "age"
          }
        }
      }
    },
    "ageHistogram": {
      "histogram": {
        "field": "age",
        "interval": 5
      }
    },
    "birthDateHistogram": {
      "date_histogram": {
        "field": "birth",
        "format": "yyyy-MM-dd",
        "interval": "year"
      }
    }
  }
}

           

結果

{
 "took" : 7,
 "timed_out" : false,
 "_shards" : {
   "total" : 3,
   "successful" : 3,
   "skipped" : 0,
   "failed" : 0
 },
 "hits" : {
   "total" : {
     "value" : 3,
     "relation" : "eq"
   },
   "max_score" : null,
   "hits" : [
     {
       "_index" : "crazy",
       "_type" : "_doc",
       "_id" : "g-q4LXMB85eJEC73L3G1",
       "_score" : null,
       "_source" : {
         "name" : "張張三",
         "age" : 5,
         "birth" : "2015-02-20",
         "desc" : "張三5歲了,他也不愛吃蘋果",
         "tag" : [
           "萌寶",
           "遊戲",
           "小暖男",
           "睡覺",
           "玩具"
         ]
       },
       "highlight" : {
         "tag" : [
           "<p cleaa='key' style='color:red'>遊</p><p cleaa='key' style='color:red'>戲</p>",
           "小暖<p cleaa='key' style='color:red'>男</p>"
         ]
       },
       "sort" : [
         5
       ]
     },
     {
       "_index" : "crazy",
       "_type" : "_doc",
       "_id" : "guq4LXMB85eJEC73KHHH",
       "_score" : null,
       "_source" : {
         "name" : "小傻子",
         "age" : 20,
         "birth" : "2000-12-20",
         "desc" : "傻子不愛吃蘋果",
         "tag" : [
           "遊戲",
           "直播",
           "直男",
           "渣男",
           "旅遊"
         ]
       },
       "highlight" : {
         "tag" : [
           "<p cleaa='key' style='color:red'>遊</p><p cleaa='key' style='color:red'>戲</p>",
           "直<p cleaa='key' style='color:red'>男</p>",
           "渣<p cleaa='key' style='color:red'>男</p>",
           "旅<p cleaa='key' style='color:red'>遊</p>"
         ]
       },
       "sort" : [
         20
       ]
     },
     {
       "_index" : "crazy",
       "_type" : "_doc",
       "_id" : "huq4LXMB85eJEC73PnGM",
       "_score" : null,
       "_source" : {
         "name" : "王五五",
         "age" : 30,
         "birth" : "1990-09-25",
         "desc" : "王五愛吃蘋果,還學java,也愛吃香蕉",
         "tag" : [
           "直男",
           "技術宅",
           "睡覺",
           "聽音樂",
           "大佬"
         ]
       },
       "highlight" : {
         "tag" : [
           "直<p cleaa='key' style='color:red'>男</p>"
         ]
       },
       "sort" : [
         30
       ]
     }
   ]
 },
 "aggregations" : {
   "ageRanges" : {
     "buckets" : [
       {
         "key" : "1.0-21.0",
         "from" : 1.0,
         "to" : 21.0,
         "doc_count" : 2
       },
       {
         "key" : "21.0-51.0",
         "from" : 21.0,
         "to" : 51.0,
         "doc_count" : 1
       }
     ]
   },
   "ageStats" : {
     "count" : 3,
     "min" : 5.0,
     "max" : 30.0,
     "avg" : 18.333333333333332,
     "sum" : 55.0
   },
   "ageHistogram" : {
     "buckets" : [
       {
         "key" : 5.0,
         "doc_count" : 1
       },
       {
         "key" : 10.0,
         "doc_count" : 0
       },
       {
         "key" : 15.0,
         "doc_count" : 0
       },
       {
         "key" : 20.0,
         "doc_count" : 1
       },
       {
         "key" : 25.0,
         "doc_count" : 0
       },
       {
         "key" : 30.0,
         "doc_count" : 1
       }
     ]
   },
   "birthDateHistogram" : {
     "buckets" : [
       {
         "key_as_string" : "1990-01-01",
         "key" : 631152000000,
         "doc_count" : 1
       },
       {
         "key_as_string" : "1991-01-01",
         "key" : 662688000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1992-01-01",
         "key" : 694224000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1993-01-01",
         "key" : 725846400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1994-01-01",
         "key" : 757382400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1995-01-01",
         "key" : 788918400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1996-01-01",
         "key" : 820454400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1997-01-01",
         "key" : 852076800000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1998-01-01",
         "key" : 883612800000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "1999-01-01",
         "key" : 915148800000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2000-01-01",
         "key" : 946684800000,
         "doc_count" : 1
       },
       {
         "key_as_string" : "2001-01-01",
         "key" : 978307200000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2002-01-01",
         "key" : 1009843200000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2003-01-01",
         "key" : 1041379200000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2004-01-01",
         "key" : 1072915200000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2005-01-01",
         "key" : 1104537600000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2006-01-01",
         "key" : 1136073600000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2007-01-01",
         "key" : 1167609600000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2008-01-01",
         "key" : 1199145600000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2009-01-01",
         "key" : 1230768000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2010-01-01",
         "key" : 1262304000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2011-01-01",
         "key" : 1293840000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2012-01-01",
         "key" : 1325376000000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2013-01-01",
         "key" : 1356998400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2014-01-01",
         "key" : 1388534400000,
         "doc_count" : 0
       },
       {
         "key_as_string" : "2015-01-01",
         "key" : 1420070400000,
         "doc_count" : 1
       }
     ]
   },
   "birthMixCounts" : {
     "buckets" : [
       {
         "key" : "1990-07-08-2020-07-08",
         "from" : 6.47432463045E11,
         "from_as_string" : "1990-07-08",
         "to" : 1.594203663045E12,
         "to_as_string" : "2020-07-08",
         "doc_count" : 3,
         "ageMinCounts" : {
           "value" : 5.0
         }
       }
     ]
   },
   "birthCounts" : {
     "buckets" : [
       {
         "key" : "2000-07-08-2020-07-08",
         "from" : 9.63051663045E11,
         "from_as_string" : "2000-07-08",
         "to" : 1.594203663045E12,
         "to_as_string" : "2020-07-08",
         "doc_count" : 2
       }
     ]
   }
 }
}
           

所有資料

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "crazy",
        "_type" : "_doc",
        "_id" : "hOq4LXMB85eJEC73NnF2",
        "_score" : 1.0,
        "_source" : {
          "name" : "李四",
          "age" : 50,
          "birth" : "1970-04-25",
          "desc" : "李四50歲了,她愛吃香蕉,是個老太太",
          "tag" : [
            "老人",
            "聽戲",
            "散步",
            "睡覺",
            "老太婆"
          ]
        }
      },
      {
        "_index" : "crazy",
        "_type" : "_doc",
        "_id" : "guq4LXMB85eJEC73KHHH",
        "_score" : 1.0,
        "_source" : {
          "name" : "小傻子",
          "age" : 20,
          "birth" : "2000-12-20",
          "desc" : "傻子不愛吃蘋果",
          "tag" : [
            "遊戲",
            "直播",
            "直男",
            "渣男",
            "旅遊"
          ]
        }
      },
      {
        "_index" : "crazy",
        "_type" : "_doc",
        "_id" : "huq4LXMB85eJEC73PnGM",
        "_score" : 1.0,
        "_source" : {
          "name" : "王五五",
          "age" : 30,
          "birth" : "1990-09-25",
          "desc" : "王五愛吃蘋果,還學java,也愛吃香蕉",
          "tag" : [
            "直男",
            "技術宅",
            "睡覺",
            "聽音樂",
            "大佬"
          ]
        }
      },
      {
        "_index" : "crazy",
        "_type" : "_doc",
        "_id" : "geq4LXMB85eJEC73HHHq",
        "_score" : 1.0,
        "_source" : {
          "name" : "瘋子",
          "age" : 23,
          "birth" : "1997-06-06",
          "desc" : "瘋子學elk來了",
          "tag" : [
            "JAVA",
            "帥哥",
            "HTML",
            "暖男",
            "看書"
          ]
        }
      },
      {
        "_index" : "crazy",
        "_type" : "_doc",
        "_id" : "g-q4LXMB85eJEC73L3G1",
        "_score" : 1.0,
        "_source" : {
          "name" : "張張三",
          "age" : 5,
          "birth" : "2015-02-20",
          "desc" : "張三5歲了,他也不愛吃蘋果",
          "tag" : [
            "萌寶",
            "遊戲",
            "小暖男",
            "睡覺",
            "玩具"
          ]
        }
      }
    ]
  }
}
           

聲明:

部落格中标注原創的文章,版權歸本部落格作者所有,若轉載或者引用本文内容請注明來源及原作者,否則依法保留追究權

打賞功能被文章底部的···預設隐藏了,如果幫到你了點個贊呗,要麼收藏一下?

【噓~~~悄悄話:終有一日,你的日積月累,會成為的别人的望塵莫及】