ElasticSearch為什么快?你知道為什么嗎?
什么是ElasticSearch,為什么要使用ES
Elasticsearch,開源的分布式搜尋及分析引擎,主要適用于以下場景:
- 搜尋引擎:快速檢索文檔、商品、新聞等之應(yīng)用。
- 日志分析:透過日志數(shù)據(jù)分析,幫助企業(yè)認知業(yè)務(wù)績效狀況。
- 數(shù)據(jù)分析:輔助數(shù)據(jù)科學(xué)家與分析師進行數(shù)據(jù)剖析,以取得珍貴信息。
- 商業(yè)智能:輔助企業(yè)制定數(shù)據(jù)導(dǎo)向決策,達成商業(yè)上之成功。
- 實時監(jiān)控:協(xié)助企業(yè)實時監(jiān)測系統(tǒng)績效、監(jiān)控數(shù)據(jù)變動,以確保系統(tǒng)正常運作。
- 安全性:資助企業(yè)確保數(shù)據(jù)安全,保障數(shù)據(jù)不受非法竊取。
- 應(yīng)用程序開發(fā):資助開發(fā)者開發(fā)基于搜尋之應(yīng)用程序,提升用戶體驗。
Elasticsearch具備以下優(yōu)勢:
- 高性能:擅長搜索與分析,包含多種查詢語言與數(shù)據(jù)構(gòu)架。
- 可擴展性:分布式構(gòu)架,透過增加節(jié)點數(shù)增強搜索與分析能力。
- 靈活性:支持多數(shù)據(jù)類型、多語言,動態(tài)映射、快速調(diào)整模型以應(yīng)對不同需求。
- 近實時分析:支持近實時分析(NRT near real time),提供實時數(shù)據(jù)查詢,有利于快速數(shù)據(jù)檢索。
- 可靠性:具備可靠性和高可用性,支持數(shù)據(jù)備份與恢復(fù)。
ElasticSearch為什么快?
Elasticsearch乃一款高性能、分布式搜索引擎,其速之快者,緣由如下:
- 分布式儲存:采用分布式儲存技術(shù),將數(shù)據(jù)存儲于多節(jié)點,分散負載,優(yōu)化整體執(zhí)行效能。
- 索引分片:將每索引分裂為多片段,實現(xiàn)并行查詢,提升搜索速度。
- 全文索引:運用高效全文索引技術(shù),將文檔轉(zhuǎn)化為可搜索的結(jié)構(gòu)化數(shù)據(jù),快速高效地完成搜索操作。
- 倒排索引:支持倒排索引數(shù)據(jù)結(jié)構(gòu),映射文檔中每個詞匯至文檔出現(xiàn)位置,當搜索請求發(fā)生時,能快速檢索包含所有搜索詞的文檔,迅速返回結(jié)果。
- 索引優(yōu)化:通過索引優(yōu)化技術(shù)提高查詢速度。支持索引覆蓋、索引下推等優(yōu)化技術(shù),加速查詢操作。
- 預(yù)存儲結(jié)果:插入數(shù)據(jù)時,預(yù)處理數(shù)據(jù),將結(jié)果預(yù)存儲于索引中,查詢時無需重新計算,提升查詢速度。
- 高效查詢引擎:采用高效查詢引擎,支持各種查詢類型,為復(fù)雜查詢提供優(yōu)化策略,提高查詢速度。
- 異步請求處理:采用異步請求處理機制,在請求抵達時立即回饋,避免長時間等待,提升用戶體驗。
- 內(nèi)存存儲:應(yīng)用內(nèi)存存儲技術(shù),在數(shù)據(jù)讀寫中減少磁盤訪問次數(shù),提高數(shù)據(jù)存儲與查詢效率。
綜上所述,Elasticsearch之所以這么快,由于其運用多項高效技術(shù),提升數(shù)據(jù)存儲、查詢、處理效率,構(gòu)筑快捷搜索體驗。
倒排索引是什么?
在Elasticsearch中,倒排索引是一種常見的索引結(jié)構(gòu),用于快速搜索文檔中的特定詞匯。
與傳統(tǒng)索引結(jié)構(gòu)相反,倒排索引的構(gòu)建方式不同。傳統(tǒng)索引結(jié)構(gòu)是以文檔為基礎(chǔ),每個文檔包含多個詞匯,然后根據(jù)這些詞匯建立索引。而倒排索引則以詞匯為基礎(chǔ),每個詞匯對應(yīng)多個文檔,然后根據(jù)這些文檔建立索引。這種結(jié)構(gòu)使得在搜索過程中能夠快速定位包含目標詞匯的文檔,從而加速搜索效率。
對于一份含有多個詞匯的文檔,倒排索引將每個詞匯視作一個關(guān)鍵字(Term),記錄該詞匯所屬文檔的編號(Document ID)以及在文檔中的位置(Term Position)。這種方式使得當用戶輸入關(guān)鍵字時,能夠迅速查找到包含該關(guān)鍵字的文檔編號,再通過編號找到相應(yīng)文檔內(nèi)容。
倒排索引的優(yōu)勢在于能迅速鎖定含指定關(guān)鍵字的文檔,同時支持復(fù)雜搜索操作,如詞組搜索、通配符搜索等。此外,由于倒排索引以詞匯為基礎(chǔ)構(gòu)建,因此在數(shù)據(jù)分析和統(tǒng)計方面也具備重要意義。在Elasticsearch中,倒排索引是一種至關(guān)重要的索引結(jié)構(gòu),廣泛應(yīng)用于搜索引擎、日志分析、推薦系統(tǒng)等領(lǐng)域。
倒排索引建立過程
ES中的倒排索引建立過程主要有2個步驟,分別是分詞、建立倒排索引
比如我們現(xiàn)在有三份文檔內(nèi)容,分別是
id | content |
1 | 深入理解Java核心技術(shù) |
2 | 深入理解Java虛擬機—周志明 |
3 | Java編程思想—布魯斯·埃克爾 |
分詞
在倒排索引構(gòu)建過程中,首先是將文檔原始內(nèi)容分割為詞項(Term)。Elasticsearch 默認采用標準分析器(Standard Analyzer)進行分詞處理。
經(jīng)過分詞處理后,您提供的三份文檔內(nèi)容將包含諸如"深入"、"理解"、"Java"、"核心"、"技術(shù)"、"編程"、"思想"、"周志明"、"布魯斯·埃克爾"等詞語。
生成倒排索引
將分開的詞,當做索引,與對應(yīng)的文檔ID進行關(guān)聯(lián),形成倒排表。
詞條 | 文檔ID |
深入 | 1,2 |
理解 | 1,2 |
Java | 1,2,3 |
虛擬機 | 2 |
核心 | 1 |
技術(shù) | 1 |
編程 | 3 |
思想 | 3 |
在倒排表生成完畢后,常規(guī)操作是對倒排表進行壓縮,以減少其空間占用。流行的壓縮算法包括Variable Byte Encoding和Simple9等技術(shù)。最后,壓縮后的倒排表將被存儲在磁盤上,以確保日后的搜索過程能夠迅速訪問倒排表。