《ElasticSearch查詢》目錄導(dǎo)航:

 

ElasticSearch是性能優(yōu)化的分布式全文搜索引擎,存儲(chǔ)數(shù)據(jù)的載體是文檔(Document),它的優(yōu)勢(shì)在于搜索速度快和支持聚合操作,在更新文檔時(shí),基本上能夠達(dá)到實(shí)時(shí)搜索。ElasticSearch引擎總是按照文檔標(biāo)識(shí)來更新數(shù)據(jù),并發(fā)控制是通過順序的版本ID(version)實(shí)現(xiàn)的,控制寫-寫、寫-讀沖突,實(shí)現(xiàn)數(shù)據(jù)弱一致性。

在ElasticSearch引擎中,索引定義了文檔的邏輯存儲(chǔ),索引是由段(Segment)組成的,段不是實(shí)時(shí)更新的,這意味著,在建立索引時(shí),一個(gè)段寫入磁盤后,就不再被更新。被刪除文檔的信息存儲(chǔ)在一個(gè)單獨(dú)的文件中,在搜索數(shù)據(jù)時(shí),ElasticSearch首先從段中查詢,再從查詢結(jié)果中過濾被刪除的文檔,這意味著,段中存儲(chǔ)”未被刪除文檔“的密度降低。多個(gè)段可以通過段合并(Segment Merge)操作把“已刪除”的文檔將從段中物理刪除,將未刪除的文檔合并成一個(gè)新段,新段中沒有”已刪除文檔“,因此,段合并操作能夠提高索引的查找速度,但段合并是IO密集型的,需要消耗大量的IO操作。

一旦數(shù)據(jù)存儲(chǔ)在倒排索引中,就不能被修改,因此,更新文檔是一項(xiàng)復(fù)雜的任務(wù)。在內(nèi)部,ElasticSearch引擎必須首先獲取文檔(從_source屬性中獲得數(shù)據(jù)),刪除舊的文檔,更新_source屬性,然后重新索引該文檔,使之可被搜索到,就是說,文檔更新的流程,實(shí)際上是先標(biāo)記文檔被刪除,后插入新的文檔,最后將新文檔編入索引。

數(shù)據(jù)的更新,主要是通過_update端點(diǎn),編寫內(nèi)嵌腳本(inline script)來實(shí)現(xiàn)。默認(rèn)的腳本語言是Groovy,Groovy是內(nèi)置的腳本語言,不需要安裝,默認(rèn)是禁用的,在未啟用動(dòng)態(tài)腳本的結(jié)點(diǎn)上執(zhí)行腳本更新,ElasticSearch引擎將會(huì)拋出異常消息:

scripts of type [inline], operation [update] and lang [groovy] are disabled

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式