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