《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
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26