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