官網:https://www.elastic.co/cn/products/elasticsearch
ElasticSearch
簡介
官網:https://www.elastic.co/cn/products/elasticsearch
特點:
高速、擴展性、最相關的搜索結果。分布式 - 節點對外表現對等,每個節點都可以作為入門,加入節點自動負載均衡。JSON - 輸入輸出格式是 JSON。Restful 風格,一切 API 都遵循 Rest 原則,容易上手。近實時搜索,數據更新在 Elasticsearch 中幾乎是完全同步的,數據檢索近乎實時。安裝方便 - 沒有其它依賴,下載后安裝很方便,簡單修改幾個參數就可以搭建集群。支持超大數據:可以擴展到 PB 級別的結構化和非結構化數據。■Elasticsearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
(資料圖)
■Elasticsearch是用Java語言開發的,并作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。Elasticsearch用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
■Elasticsearch 還是高擴展、高實時的搜索與數據分析引擎。它能很方便的使大量數據具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數據在生產環境變得更有價值。
ElasticSearch信息概覽
什么是index,type,doc
■index:索引是文檔(Document)的容器,是一類文檔的集合,可以理解成我們常用的mysql中的數據庫。
■Type 可以理解成mysql中的表。
■Document Index 里面單條的記錄稱為Document(文檔)。等同于mysql中的一行數據。
建庫,建表,建字段
■建庫腳本
PUT http://127.0.0.1:9200/cunw-share-es-index
就這么一個請求就可以建成一個以cunw-share-es-index為庫名的ES數據庫索引庫;
■建表腳本,建字段
PUT http://127.0.0.1:9200/cunw-share-es-index/sanbu/1
PUT http://127.0.0.1:9200/cunw-share-es-index/sanbu/1{ "name":"大哥", "sex": "男", "hight":"180", "date":"2022-01-01", "info":"Hello World"}
索引基本創建完成。
什么是mapping
■mapping 是用來定義文檔及其字段的存儲方式、索引方式的手段,例如利用mapping 來定義以下內容:哪些字段需要被定義為全文檢索類型;哪些字段包含number、date類型等格式化時間格式;自定義規則,用于控制動態添加字段的映射。
■mapping是一種簡單的數據類型,例如text、keyword、integer、double、boolean、long、date、ip類型。也可以是一種分層的json對象(支持屬性嵌套)。也可以是一些不常用的特殊類型,例如geo_point、geo_shape、completion。
■針對同一字段支持多種字段類型可以更好地滿足我們的搜索需求,例如一個string類型的字段可以設置為text來支持全文檢索,與此同時也可以讓這個字段擁有keyword類型來做排序和聚合,另外我們也可以為字段單獨配置分詞方式,例如"analyzer": "ik_max_word"。從某種意義上來講,就是表字段類型,int,varchar,date...
為什么要用mapping
提出疑問,修改一個字段的類型:
{ "sanbu": { "properties": { "hight": { "type": "integer" } } }}
為什么不能修改一個字段的type?原因是一個字段的類型修改以后,那么該字段的所有數據都需要重新索引。Elasticsearch底層使用的是lucene庫,字段類型修改以后索引和搜索要涉及分詞方式等操作。
ElasticSearch 分片,副本
■數據分片:
簡單來講就是咱們在ES中所有數據的文件塊,也是數據的最小單元塊,整個ES集群的核心就是對所有分片的分布、索引、負載、路由等達到驚人的速度。
實列場景:
假設 IndexA 有2個分片,我們向 IndexA 中插入10條數據 (10個文檔),那么這10條數據會盡可能平均的分為5條存儲在第一個分片,剩下的5條會存儲在另一個分片中。說白了:數據分片其實類似主流關系型數據庫的表分區(分表)的概念有點類似。這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上。構成分布式搜索要注意的是分片的數量只能在索引創建前指定,并且索引創建后不能更改。
分片數量設置計算公式:
分片個數是越多越好,還是越少越好了?根據整個索引的數據量來判斷。SN(分片數) = IS(索引大小) / 30,當然也要根據能夠給ES分配資源的實際情況而定奪。
■數據副本
副本是主分片的拷貝,es可以設置多個索引的副本,副本的作用一是提高系統的容錯性,當某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。副本分片數,可以動態的修改。增加副本數,還可以在一定程度上提高服務的可用性(讀取的吞吐)。
■設置分配,副本腳本代碼
PUT /index { "settings":{ "number_of_shards" : 3, //指 這個index主分片分布在3個節點上 "number_of_replicas":1 //指 每一個主分片都有一個副本 } }
■查詢寫法
es中的查詢請求有兩種方式,一種是簡易版的查詢,另外一種是使用JSON完整的請求體,叫做結構化查詢(DSL)。由于DSL查詢更為直觀也更為簡易,所以大都使用這種方式。DSL查詢是POST過去一個json,由于post的請求是json格式的,所以存在很多靈活性,也有很多形式。
最基本的查詢語句,查詢所有數據值得注意的是,在請求之前一定確保它是正確的Json。
{ "query": { "match_all": {} }}
查詢過濾條件關鍵字
■查詢關鍵字的用法match,term,wildcard,range....
1.match 通過單詞字面意思理解是匹配的意思,顧名思義如果匹配到其中的任意字詞就會命中,其實就是通過ES默認的ik分詞器去做分詞查詢。
{ "query": { "match": { "name":軟" } }}
2.term 如果匹配到其中所有字詞才會命中。
{ "query": { "match": { "name":"軟" } }}
3.wildcard 用法類似mysql的like,注意這里的通配符是*
{ "query": { "match": { "name":"*軟*" } }}
4.range 看到這個詞就會想到區間,它的用法類似于mysql的between ..and ..
{ "query": { "range": { "height":{ "gt": "150", "lt": "170" } } }}
update,delete語句
■ 根據ID進行單個更新
POST /index/type/_id/_update{ "doc" : { "publish_date" :"2021-11-10", }}
■ 根據ID進行單個刪除
DELETE /index/type/_id
Elastic 有一條完整的產品線 ELK - Elasticsearch、Logstash、Kibana,前面說的三個就是常說的 ELK 技術棧(開源實時日志分析平臺)。Logstash 的作用就是一個數據收集器,將各種格式各種渠道的數據通過它收集解析之后格式化輸出到 Elastic Search ,最后再由 Kibana 提供的比較友好的 Web 界面進行匯總、分析、搜索。ELK 內部實際就是個管道結構,數據從Logstash 到 Elastic Search 再到 Kibana 做可視化展示。這三個組件各自也可以單獨使用,比如 Logstash 不僅可以將數據輸出到 Elastic Search ,也可以到數據庫、緩存等。
關于ES的內容還有很多東西等著我們,搭建、分詞器、集群、節點角色分配、冷熱分離、讀寫分離等等,后續我們再輸出相關詳細內容。
Kibana
簡介
Kibana 是 Elastic Stack 成員之一,它是一個基于 Node.js 的 Elasticsearch 索引庫數據統計工具,可以利用 Elasticsearch 的聚合功能,生成各種圖表,如柱形圖,線狀圖,餅;而且還提供了操作 Elasticsearch 索引數據的控制臺,并且提供了一定的 API 提示。您可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操作。您可以很方便地利用圖表、表格及地圖對數據進行多元化的分析和呈現。
Kibana 可以使大數據通俗易懂。它很簡單,基于瀏覽器的界面便于您快速創建和分享動態數據儀表板來追蹤 Elasticsearch 的實時數據變化。
搭建
搭建 Kibana 非常簡單。可以分分鐘完成 Kibana 的安裝并開始探索 Elasticsearch 的索引數據 ——— 沒有代碼、不需要額外的基礎設施。當前我們公司使用的版本是 5.5.1。
常用模塊
■ Discover
Discover 主要是做索引查詢,功能非常強大。從發現頁可以交互地探索ES的數據??梢栽L問與所選索引模式相匹配的每一個索引中的每一個文檔??梢蕴峤凰阉鞑樵儭⒑Y選搜索結果和查看文檔數據。還可以看到匹配搜索查詢和獲取字段值統計的文檔的數量。如果一個時間字段被配置為所選擇的索引模式,則文檔的分布隨著時間的推移顯示在頁面頂部的直方圖中。
■ Visualize
視圖展示,支持許多風格??梢暬苁鼓銊撛炷愕?Elasticsearch 指標數據的可視化。然后你可以建立儀表板顯示相關的可視化。Kibana 的可視化是基于 Elasticsearch 查詢。通過一系列的 Elasticsearch聚合提取和處理您的數據,您可以創建圖表顯示你需要知道的關于趨勢,峰值和驟降。您可以從搜索保存的搜索中創建可視化或從一個新的搜索查詢開始。
■ Dashboard
圖表展示,一個儀表板顯示Kibana保存的一系列可視化。你可以 根據需要安排和調整可視化,并保存儀表盤,可以被加載和共享。
■ Timelion
Timelion 是一個時間序列數據的可視化功能,可以結合在一個單一的可視化完全獨立的數據源。它是由一個簡單的表達式語言驅動的,你用來檢索時間序列數據,進行計算,找出復雜的問題的答案,并可視化的結果。這個功能由一系列的功能函數組成,同樣的查詢的結果,也可以通過 Dashboard 顯示查看。
■ Dev Tools
其實就是一個控制臺,可以直接使用 DSL語法來直接操作es中的數據,使用戶方便地通過瀏覽器直接與 Elasticsearch 進行交互。
使用
■ 搜索、查看并可視化 Elasticsearch 中所索引的數據,并通過創建柱狀圖、餅狀圖、表格、直方圖和地圖對數據進行分析。儀表板視圖能將這些可視化元素集中到一起,然后通過瀏覽器加以分享,以提供有關海量數據的實時分析視圖,為下列用例提供支持:
a:日志處理和分析
b:基礎設施指標和容器監測
c:應用程序性能監測 (APM)
d:地理空間數據分析和可視化
e:安全分析
f:業務分析
■ 借助網絡界面來監測和管理 Elastic Stack 實例并確保實例的安全。
■ 針對基于 Elastic Stack 開發的內置解決方案(面向可觀測性、安全和企業搜索應用程序),將其訪問權限集中到一起
如何使用
使用 Discover 搜索欄進行搜索。使用 Dev Tools 的 Console 直接與 Elastcsearch 進行交互 。DSL語法
■ 查詢所有
■ 查詢特定的字段,按照指定字段排序
■ 查詢指定字段的日志
■ 分頁查詢所有的日志
本人就職于公司大數據組,正好近期我在公司分享了關于ES、Kiban和機器學習的一些知識,總結出本文獻給大家。