首頁 > 軟體

ElasticSearch核心概念

2022-07-18 14:03:36

簡介

Elasticsearch 是一個分散式可延伸的實時搜尋和分析引擎,一個建立在全文搜尋引擎 Apache Lucene™ 基礎上的搜尋引擎.當然 Elasticsearch 並不僅僅是 Lucene 那麼簡單,它不僅包括了全文搜尋功能,還可以進行以下工作:

  • 分散式實時檔案儲存,並將每一個欄位都編入索引,使其可以被搜尋。
  • 實時分析的分散式搜尋引擎。
  • 可以擴充套件到上百臺伺服器,處理PB級別的結構化或非結構化資料。

核心概念

以下為ES和Mysql等的對照關係

Relational DBElasticsearch
資料庫(database)索引(indices)
表(tables)types
行(rows)documents
欄位(columns)fields

檔案

就是類似關係型資料庫的一行行的記錄

elasticsearch是面向檔案的,那麼就意味著索弓和搜尋資料的最小單位是檔案。

elasticsearch中,檔案有幾個重要屬性:

  • 自我包含, 一篇檔案同時包含欄位和對應的值,也就是同時包含key:value !
  • 可以是層次型的
  • 靈活的結構,檔案不依賴預先定義的模式,我們知道關係型資料庫中,要提前定義欄位才能使用,在elasticsearch中,對於欄位是非常靈活的,有時候,我們可以忽略該欄位,或者動態的新增一個新的欄位。

儘管我們可以隨意的新增或者忽略某個欄位,但是,每個欄位的型別非常重要,比如一一個年齡欄位型別,可以是字串也可以是整形。因為elasticsearch會儲存欄位和型別之間的對映及其他的設定。這種對映具體到每個對映的每種型別,這也是為什麼在elasticsearch中,型別有時候也稱為對映型別。

型別

ES7之後Type被捨棄

型別是檔案的邏輯容器,就像關係型資料庫中的一樣。
型別中對於欄位的定義稱為對映,比如name對映為字串型別。

我們說檔案是無模式的 ,它們不需要擁有對映中所定義的所有欄位。

但是如果要新增一個欄位,那麼elasticsearch的流程是什麼?

elasticsearch會自動的將新欄位加入對映,但是這個欄位的不確定它是什麼型別, elasticsearch就開始猜,如果這個值是18 ,那麼elasticsearch會認為它是整形。但是elasticsearch也可能猜不對 ,所以最安全的方式就是提前定義好所需要的對映,這點跟關係型資料庫殊途同歸了,先定義好欄位,然後再使用。

索引

可以淺顯的理解為就是資料庫

索引是對映型別的容器, elasticsearch中的索引是一個非常大的檔案集合。索引儲存了對映型別的欄位和其他設定。然後它們被儲存到了各個分片上。

節點

Node為叢集中的單臺節點,其可以為master節點亦可為slave節點(節點屬性由叢集內部選舉得出)並提供儲存相關資料的功能

分片

在es中,預設一個Es就是一個叢集,一個叢集又至少有一個節點。而一個節點就是一個es程序,節點可以有多個預設索引,如果你建立新索引,那麼索引將會由5個分片( primary shard ,又稱主分片)構成,每一個主分片會有一個副本( replica shard ,又稱複製分片)
分片有兩種型別:primary主片和replica副本,primary用於檔案儲存,Replica shard是Primary Shard的副本,用於冗餘資料及提高搜尋效能。

上圖是一個有3個節點的叢集,可以看到主分片和對應的複製分片都不會在同一個節點內,這樣有利於某個節點掛掉了,資料也不至於丟失。
實際上, 一個分片是一個Lucene索引, 一個包含倒排索引的檔案目錄,倒排索引的結構使得elasticsearch在不掃描全部檔案的情況下,就能告訴你哪些檔案包含特定的關鍵字

倒排索引

elasticsearch使用的是一種稱為倒排索引的結構,採用Lucene倒排索作為底層。這種結構適用於快速的全文搜尋,一個索引由檔案中所有不重複的列表構成,對於每一個詞,都有一個包含它的檔案列表。 例如,現在有兩個檔案,每個檔案包含如下內容:

Study every day, good good up to forever  # 檔案1包含的內容
To forever, study every day,good good up  # 檔案2包含的內容

為為建立倒排索引,我們首先要將每個檔案拆分成獨立的詞(或稱為詞條或者tokens) ,然後建立一個包含所有不重複的詞條的排序列表,然後列出每個詞條出現在哪個檔案:

現在,我們試圖搜尋 to forever,只需要檢視包含每個詞條的檔案

兩個檔案都匹配,但是第一個檔案比第二個匹配程度更高。如果沒有別的條件,現在,這兩個包含關鍵字的檔案都將返回。

再來看一個範例,比如我們通過部落格標籤來搜尋部落格文章。那麼倒排索引列表就是這樣的一個結構:

部落格文章(原始資料)部落格文章(原始資料)索引列表(倒排索引)索引列表(倒排索引)
部落格文章ID標籤標籤部落格文章ID
1pythonpython1,2,3
2pythonlinux3,4
3linux,python  
4linux

如果要搜尋含有python標籤的文章,那相對於查詢所有原始資料而言,查詢倒排索引後的資料將會快的多。只需要檢視標籤這一欄,然後獲取相關的文章ID即可。完全過濾掉無關的所有資料,提高效率!

elasticsearch的索引和Lucene的索引對比
在elasticsearch中,索引(庫)這個詞被頻繁使用,這就是術語的使用。在elasticsearch中 ,索引被分為多個分片,每份分片是一個Lucene的索引。所以一個elasticsearch索引是由多 個Lucene索引組成的。

到此這篇關於ElasticSearch簡介的文章就介紹到這了,更多相關ElasticSearch簡介內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com