Elasticsearch的增刪改查原理分析

2022-06-14 09:03:09 字數 1873 閱讀 1638

elasticsearch的索引(index)是用於組織資料的邏輯命名空間(如資料庫)。elasticsearch的索引有乙個或多個分片(shard)(預設為5)。分片是實際儲存資料的lucene索引,它本身就是乙個搜尋引擎。每個分片可以有零個或多個副本(replicas)(預設為1)。elasticsearch索引還具有「型別(type)」(如資料庫中的表),允許在索引中對資料進行邏輯分割槽。elasticsearch索引中給定「型別(type)」中的所有文件(documents)具有相同的屬性(如表的模式)。

前者顯示了乙個由三個主分片組成的elasticsearch集群,每個主分片分別有乙個副本。所有這些分片一起形成乙個elasticsearch索引,每個分片是lucene索引本身。

後者演示了elasticsearch索引,分片,lucene索引和文件(document)之間的邏輯關係。

當向協調節點傳送請求以索引新文件時,將執行以下操作:

刪除和更新操作也是寫操作。但是,elasticsearch中的文件是不可變的(immutable),因此不能刪除或修改。

如何刪除/更新文件呢?

刪除:磁碟上的每個分段(segment)都有乙個.del檔案與它相關聯。當傳送刪除請求時,該文件未被真正刪除,而是在.del檔案中標記為已刪除。此文件可能仍然能被搜尋到,但會從結果中過濾掉。當分段合併時,在.del檔案中標記為已刪除的文件不會被包括在新的合併段中。

更新:建立新文件時,elasticsearch將為該文件分配乙個版本號。對文件的每次更改都會產生乙個新的版本號。當執行更新時,舊版本在.del檔案中被標記為已刪除,並且新版本在新的分段中編入索引。舊版本可能仍然與搜尋查詢匹配,但是從結果中將其過濾掉。

讀操作由兩個階段組成:查詢階段(query)和獲取(fetch)階段。

查詢階段

在此階段,協調節點將搜尋請求路由到索引(index)中的所有分片(shards)(包括:主分片或副本分片)。分片獨立執行搜尋,並根據相關性分數建立乙個優先順序排序結果(稍後我們將介紹相關性分數)。所有分片將匹配的文件和相關分數的文件id返回給協調節點。協調節點建立乙個新的優先順序佇列,並對全域性結果進行排序。可以有很多文件匹配結果,但預設情況下,每個分片將前10個結果傳送到協調節點,協調建立優先順序佇列,從所有分片中分選結果並返回前10個匹配。

獲取階段

在協調節點對所有結果進行排序,生成全域性排序的文件列表後,它將向所有分片請求原始文件。所有的分片都會豐富文件並將其返回到協調節點。

傳送乙個請求:

這個請求可能被分發到集群裡的任意乙個節點:

這時這個節點就成為當前請求的協調者(coordinator),它決定:

js的增改刪

insertbefore插入元素 語法 父元素.insertbefore 引數1,引數2 引數1 需要插入新的元素 引數2 插入到哪個元素的前面 1.建立新的元素 2.原本存在的元素 3.需要插入的元素 獲取元素 var ul document.getelementbyid ul var li2 d...

ElasticSearch的工作機制

elasticsearch,和solr一樣,是底層基於apache lucene,且具備高可靠性的企業級搜尋引擎。elasticsearch中的一些概念其實和關係型資料庫都有對應關係,比如資料庫在es中被稱為索引,表在es中被稱作type。具體對應關係見下表。elasticsearch中的repli...

ElasticSearch的工作機制

elasticsearch,和solr一樣,是底層基於apache lucene,且具備高可靠性的企業級搜尋引擎。elasticsearch中的一些概念其實和關係型資料庫都有對應關係,比如資料庫在es中被稱為索引,表在es中被稱作type。具體對應關係見下表。elasticsearch中的repli...