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