滄州北京網(wǎng)站建設(shè)杭州網(wǎng)站推廣優(yōu)化公司
一、什么是Elasticsearch
Elasticsearch(簡稱ES)是一款非常強大的開源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。它使用Java編寫,基于Apache Lucene來構(gòu)建索引和提供搜索功能,是一個分布式、可擴展、近實時的高性能搜索與數(shù)據(jù)分析引擎。
1、Elasticsearch用在哪些場景?
我們想想一下,例如我們?nèi)ithub上去搜索一些倉庫,它去搜索的時候,不僅僅是把相關(guān)的倉庫搜索出來,還可以把你搜索的關(guān)鍵字所在的相關(guān)代碼塊展示出來,并進行了高亮顯示,非常智能:
又例如我們?nèi)ゾ〇|上買東西,輸入商品信息后,網(wǎng)站立馬就會顯示出和我們輸入的關(guān)鍵字有關(guān)的商品,例如下圖輸入“iPhone”后,下面商品搜索出與蘋果手機相關(guān)的商品,并且“iPhone”這個字還會高亮顯示:
還比如,我們平時編程時遇到一些問題,肯定會去百度和谷歌一下,找相關(guān)問題的答案。在搜索引擎中輸入相關(guān)問題描述,下面就會顯示和這個問題相關(guān)的答案,并且和搜索關(guān)鍵字相關(guān)的內(nèi)容也會被高亮顯示:
甚至是在我們平時打車的時候,我們搜索附近車輛的時候,每一輛車所在的位置也是搜索范圍,是否是我們所在區(qū)域關(guān)鍵字的位置的車,為我們匹配最近的車輛:
以上的這些場景,Elasticsearch都可以實現(xiàn)。
2、Elastic stack(ELK)技術(shù)棧介紹
Elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實時監(jiān)控等領(lǐng)域。
什么是“日志數(shù)據(jù)分析”?就是我們的項目在實際運行過程中,會產(chǎn)生海量的日志信息,這些日志信息會方便我們定義系統(tǒng)出現(xiàn)的問題。而Elasticsearch可以幫我們將這些日志進行可視化展示,方便我們做日志分析。
另一個“實時監(jiān)控”的概念,即我們在項目運行的過程中,它的運行狀態(tài)也是數(shù)據(jù),如CPU、內(nèi)存等情況,也可以被Elasticsearch收集并展示過來:
這足以看出Elasticsearch這個搜索引擎的應(yīng)用范圍是非常廣泛的。
在ELK的技術(shù)棧中,盡管有很多個組件,但核心就是我們的Elasticsearch,它主要負責(zé)數(shù)據(jù)的存儲、計算、搜索和分析;而Logstash和Beats主要負責(zé)數(shù)據(jù)抓取,Kibana則是一個數(shù)據(jù)可視化組件,用來在頁面上展示數(shù)據(jù):
在ELK數(shù)據(jù)棧中,Logstash和Beats、Kibana都不是不可替代的,我們可以使用自己的方法抓取數(shù)據(jù),和進行圖形化展示。而Elasticsearch這個核心組件是不可替代的。
二、Elasticsearch的底層
Elasticsearch底層基于Apache Lucene開源庫進行封裝。Lucene是一個Java語言的高性能、可擴展的搜索引擎類庫,它提供了全文索引和搜索的底層實現(xiàn)。是Apache公司的頂級項目,由DougCutting于1999年研發(fā)。
官網(wǎng)地址:https://lucene.apache.org/
打開官網(wǎng)首頁我們可以看到,截止到2024年11月Lucene的最新版本是10.0.0版,已經(jīng)迭代了很多版本了。
1、Lucene的優(yōu)點
Lucene其實就是一個濃縮的jar包(類庫),它有以下的優(yōu)點:
(1)易擴展
Lucene具有高度的可擴展性和可定制性,其系統(tǒng)架構(gòu)設(shè)計精良,使得開發(fā)者能夠方便地根據(jù)業(yè)務(wù)需求進行功能擴展和定制(二次開發(fā))。通過實現(xiàn)特定的接口和繼承相關(guān)類,開發(fā)者可以輕松地添加新功能、優(yōu)化現(xiàn)有功能或調(diào)整索引和搜索邏輯。
(2)高性能(基于倒排索引)
Lucene的高性能主要得益于其采用的倒排索引技術(shù)。倒排索引是一種將文檔中的詞匯項作為關(guān)鍵字,文檔ID作為值,形成的“值-鍵”對調(diào)的索引結(jié)構(gòu)。這種結(jié)構(gòu)使得Lucene在搜索時能夠直接根據(jù)關(guān)鍵詞快速定位到包含該詞的所有文檔,從而極大地提高了搜索效率。此外,Lucene還通過一系列優(yōu)化措施,如壓縮索引數(shù)據(jù)、使用緩存等,進一步提升了搜索性能。
想象我們有一堆書,想要快速找到包含某個關(guān)鍵詞的書,最直接的方法是逐本翻閱,但這顯然非常耗時。而Lucene則采用了一種更聰明的方法,即倒排索引。它首先為每本書中的每個關(guān)鍵詞建立一個索引,記錄下這個關(guān)鍵詞出現(xiàn)在哪些書中以及出現(xiàn)的位置。這樣,當我們想要找到包含某個關(guān)鍵詞的書時,只需要查看這個索引,就能迅速定位到相關(guān)的書。這種索引方式就像是一個高效的“書簽”,幫助我們快速找到目標內(nèi)容,從而大大提高了搜索效率。
2、Lucene的缺點
以上是Lucene的優(yōu)點,但同時它也存在以下缺點:
(1)只限于Java語言開發(fā)
Lucene是一個基于Java語言開發(fā)的搜索引擎庫,這意味著它主要適用于Java語言的項目和開發(fā)環(huán)境。對于那些不使用Java的項目或團隊來說,可能需要額外的學(xué)習(xí)和集成成本。
(2)學(xué)習(xí)曲線陡峭
Lucene作為一個功能強大且復(fù)雜的搜索引擎庫,API設(shè)計非常復(fù)雜晦澀,其學(xué)習(xí)曲線相對陡峭。對于初學(xué)者來說,需要花費較多的時間和精力來熟悉Lucene的架構(gòu)、API和最佳實踐。
(3)不支持水平擴展(需二次開發(fā))
Lucene的主要目的是為了實現(xiàn)搜索,而對于高并發(fā)、高可用等場景沒有技術(shù)支持,無法直接進行水平擴展(集群擴展),即通過在多個服務(wù)器上部署多個實例來共同處理搜索請求。雖然Lucene可以通過分片(sharding)等技術(shù)在一定程度上實現(xiàn)數(shù)據(jù)的分布式存儲和搜索,但這需要開發(fā)者進行額外的二次開發(fā)工作。
三、Elasticsearch的發(fā)展
Elasticsearch的起源可以追溯到2004年,當時Shay Banon基于Lucene開發(fā)了一個名為Compass的搜索引擎(單體應(yīng)用,主要為他老婆搜索食譜用)。然而,隨著技術(shù)的不斷演進和需求的日益增長,Shay Banon在2010年決定重寫Compass(支持分布式和集群環(huán)境),并將其命名為Elasticsearch。這一決定標志著Elasticsearch作為一個獨立的開源項目正式誕生,并迅速在搜索和分析領(lǐng)域嶄露頭角。
Elasticsearch的官網(wǎng)地址為:https://www.elastic.co/cn/:
這是一個提供Elasticsearch相關(guān)資源、文檔和社區(qū)支持的權(quán)威平臺,它是由Elastic公司管理,這個公司的創(chuàng)始人就是上面提到Elasticsearch的原創(chuàng)者Shay Banon。
截止至2024年11月,Elasticsearch已經(jīng)發(fā)展到了8.15.3版本,這一版本在性能、功能和安全性等方面都進行了諸多優(yōu)化和升級。隨著版本的迭代,Elasticsearch不斷引入新技術(shù)和特性,以滿足日益復(fù)雜和多樣化的搜索和分析需求。
相比于Lucene,Elasticsearch具備下列優(yōu)勢:
1、支持分布式,可水平擴展:
Elasticsearch采用了分布式架構(gòu),可以輕松擴展到多個節(jié)點,以便處理大規(guī)模數(shù)據(jù)。這種架構(gòu)使得Elasticsearch能夠應(yīng)對PB級別的數(shù)據(jù)存儲和搜索需求,同時保持高性能和可用性。
通過分片(sharding)和復(fù)制(replication)機制,Elasticsearch實現(xiàn)了數(shù)據(jù)的高可用性和容錯性。即使某個節(jié)點發(fā)生故障,系統(tǒng)也能快速切換到其他節(jié)點,確保搜索和分析服務(wù)的連續(xù)性。
2、提供Restful接口,可被任何語言調(diào)用:
Elasticsearch提供了一個簡單易用的RESTful API,使得數(shù)據(jù)的索引、搜索和分析變得非常簡單。這一API遵循REST風(fēng)格,支持HTTP協(xié)議,因此可以被任何編程語言調(diào)用。
通過RESTful API,開發(fā)者可以輕松地將Elasticsearch集成到各種應(yīng)用程序中,實現(xiàn)數(shù)據(jù)的實時搜索、分析和可視化。這種靈活性使得Elasticsearch成為構(gòu)建現(xiàn)代搜索和分析應(yīng)用的理想選擇。
綜上所述,Elasticsearch作為Lucene的衍生產(chǎn)品,不僅繼承了Lucene的強大搜索功能,還通過分布式架構(gòu)和RESTful API等創(chuàng)新特性,實現(xiàn)了更高的可擴展性、易用性和集成性。這些優(yōu)勢使得Elasticsearch在搜索和分析領(lǐng)域具有廣泛的應(yīng)用前景和巨大的市場潛力。
四、為什么學(xué)習(xí)Elasticsearch?
實際上,從Lucene誕生開始,就不止Elasticsearch一個搜索引擎程序問世,其中還包含Splunk(商業(yè)項目)、Solr(Apache的開源搜索引擎),但是Elasticsearch在全球搜索引擎排名中,一直穩(wěn)坐第一名的寶座,并且和第二名Splunk拉開了很大差距:
其實在Elasticsearch剛剛誕生時,Solr在全球搜索引擎中占有很大比例,但是隨著后來的發(fā)展,Solr漸漸地被Elasticsearch超越了(大概是2016年):
所以我們主要還是以學(xué)習(xí)目前占比最高的搜索引擎作為我們本次學(xué)習(xí)的目標。
五、學(xué)習(xí)總結(jié)
本篇博客,我們一共學(xué)習(xí)了以下三個知識,大家可以回顧一下:
1、什么是elasticsearch?
一個開源的分布式搜索引擎,可以用來實現(xiàn)搜索、日志統(tǒng)計、分析系統(tǒng)監(jiān)控等功能
2、什么是elastic stack(ELK)?
是以elasticsearch為核心的技術(shù)棧,包括beats、Logstash、kibana、elasticsearch
3、什么是Lucene?
是Apache的開源搜索引擎類庫,提供了搜索引擎的核心API
至此,關(guān)于elasticsearch的基礎(chǔ)介紹就到此結(jié)束了,為了更加深入理解elasticsearch為的原理,下一篇我們來學(xué)習(xí)什么是“倒排索引”。
參考:《黑馬Elasticsearch全套教程》
轉(zhuǎn)載請注明出處:https://guangzai.blog.csdn.net/article/details/143658138