課程資源新技術(shù)研討elasticsearch_第1頁
課程資源新技術(shù)研討elasticsearch_第2頁
課程資源新技術(shù)研討elasticsearch_第3頁
課程資源新技術(shù)研討elasticsearch_第4頁
課程資源新技術(shù)研討elasticsearch_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Elasticsearch分布式搜索引擎搜索通過一些關(guān)鍵字,查詢出跟這些關(guān)鍵字相關(guān)的信息全文搜索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。什么是Elasticsearch?Elasticsearch是一個(gè)開源的搜索引擎,建立在一個(gè)全文搜索引擎庫

ApacheLucene?

基礎(chǔ)之上。Lucene可以說是當(dāng)下最先進(jìn)、高性能、全功能的搜索引擎庫—?無論是開源還是私有。Elasticsearch是使用Java編寫的,它的內(nèi)部使用Lucene做索引與搜索,它的目的是通過隱藏Lucene的復(fù)雜性,使全文檢索變得簡單,取而代之的提供一套簡單一致的RESTfulAPI。它可以被下面這樣準(zhǔn)確的形容:一個(gè)分布式的實(shí)時(shí)文檔存儲(chǔ),每個(gè)字段可以被索引與搜索一個(gè)分布式實(shí)時(shí)分析搜索引擎能勝任上百個(gè)服務(wù)節(jié)點(diǎn)的擴(kuò)展,并支持PB級(jí)別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)Elasticsearch是面向文檔的,它存儲(chǔ)整個(gè)對(duì)象或文檔。它使用JSON作為文檔的序列化格式,JSON序列化為大多數(shù)編程語言所支持,并且已經(jīng)成為NoSQL領(lǐng)域的標(biāo)準(zhǔn)格式。倒排索引Elasticsearch使用一種稱為倒排索引的結(jié)構(gòu),它適用于快速的全文搜索。一個(gè)倒排索引由文檔中所有不重復(fù)詞的列表構(gòu)成,對(duì)于其中每個(gè)詞,有一個(gè)包含它的文檔列表。例如,假設(shè)我們有兩個(gè)文檔,每個(gè)文檔的content域包含如下內(nèi)容:1.Thequickbrownfoxjumpedoverthelazydog2.Quickbrownfoxesleapoverlazydogsinsummer為了創(chuàng)建倒排索引,首先將每個(gè)文檔的content域拆分成單獨(dú)的詞(我們稱它為詞條或tokens),創(chuàng)建一個(gè)包含所有不重復(fù)詞條的排序列表,然后列出每個(gè)詞條出現(xiàn)在哪個(gè)文檔。分析和分析器分析包含下面的過程:首先,將一塊文本分成適合于倒排索引的獨(dú)立的詞條,之后,將這些詞條統(tǒng)一化為標(biāo)準(zhǔn)格式以提高它們的“可搜索性”字符過濾器首先,字符串按順序通過每個(gè)字符過濾器,在分詞前整理字符串。一個(gè)字符過濾器可以用來去掉HTML,或者將&轉(zhuǎn)化成and。分詞器其次,字符串被

分詞器

分為單個(gè)的詞條。一個(gè)簡單的分詞器遇到空格和標(biāo)點(diǎn)的時(shí)候,可能會(huì)將文本拆分成詞條,默認(rèn)標(biāo)準(zhǔn)分詞器根據(jù)Unicode聯(lián)盟定義的單詞邊界劃分文本。Token過濾器最后,詞條按順序通過每個(gè)token過濾器。這個(gè)過程可能會(huì)改變?cè)~條(例如,小寫化Quick),刪除詞條(例如,像a,and,the等無用詞),或者增加詞條(例如,像jump和leap這種同義詞)。排序與相關(guān)性相關(guān)性查詢語句會(huì)為每個(gè)文檔生成一個(gè)_score字段來代表相關(guān)性。Elasticsearch的相似度算法被定義為檢索詞頻率/反向文檔頻率,TF/IDF,包括以下內(nèi)容:檢索詞頻率檢索詞在該字段出現(xiàn)的頻率?出現(xiàn)頻率越高,相關(guān)性也越高。字段中出現(xiàn)過5次要比只出現(xiàn)過1次的相關(guān)性高。反向文檔頻率每個(gè)檢索詞在索引中出現(xiàn)的頻率?頻率越高,相關(guān)性越低。檢索詞出現(xiàn)在多數(shù)文檔中會(huì)比出現(xiàn)在少數(shù)文檔中的權(quán)重更低。字段長度準(zhǔn)則字段的長度是多少?長度越長,相關(guān)性越低。檢索詞出現(xiàn)在一個(gè)短的title要比同樣的詞出現(xiàn)在一個(gè)長的content字段權(quán)重更大。排序按照字段的值排序通過時(shí)間來排序。多級(jí)排序根據(jù)時(shí)間和相關(guān)性結(jié)合排序,不同的排序條件順序得到不同結(jié)果。多值字段排序一種情形是字段有多個(gè)值的排序,需要記住這些值并沒有固有的順序;一個(gè)多值的字段僅僅是多個(gè)值的包裝。對(duì)于數(shù)字或日期,你可以將多值字段減為單值,這可以通過使用min、max、avg或是sum排序。有時(shí),相關(guān)性評(píng)分對(duì)你來說并沒有意義,還有其它的排序方式集群原理集群原理一個(gè)運(yùn)行中的Elasticsearch實(shí)例稱為一個(gè)節(jié)點(diǎn),而集群是由一個(gè)或者多個(gè)擁有相同配置的節(jié)點(diǎn)組成,它們共同承擔(dān)數(shù)據(jù)和負(fù)載的壓力。當(dāng)有節(jié)點(diǎn)加入集群中或者從集群中移除節(jié)點(diǎn)時(shí),集群將會(huì)重新平均分布所有的數(shù)據(jù)。當(dāng)一個(gè)節(jié)點(diǎn)被選舉成為主節(jié)點(diǎn)時(shí),它將負(fù)責(zé)管理集群范圍內(nèi)的所有變更,例如增加、刪除索引,或者增加、刪除節(jié)點(diǎn)等。而主節(jié)點(diǎn)并不需要涉及到文檔級(jí)別的變更和搜索等操作,所以當(dāng)集群只擁有一個(gè)主節(jié)點(diǎn)的情況下,即使流量的增加它也不會(huì)成為瓶頸。任何節(jié)點(diǎn)都可以成為主節(jié)點(diǎn)。作為用戶,我們可以將請(qǐng)求發(fā)送到

集群中的任何節(jié)點(diǎn)

,包括主節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都知道任意文檔所處的位置,并且能夠?qū)⑽覀兊恼?qǐng)求直接轉(zhuǎn)發(fā)到存儲(chǔ)我們所需文檔的節(jié)點(diǎn)。無論我們將請(qǐng)求發(fā)送到哪個(gè)節(jié)點(diǎn),它都能負(fù)責(zé)從各個(gè)包含我們所需文檔的節(jié)點(diǎn)收集回?cái)?shù)據(jù),并將最終結(jié)果返回給客戶端。集群狀態(tài)State有三種狀態(tài)標(biāo)識(shí)集群運(yùn)行狀態(tài)。green:所有的主分片和副本分片都正常運(yùn)行。

yellow:所有的主分片都正常運(yùn)行,但不是所有的副本分片都正常運(yùn)行。

red:有主分片沒能正常運(yùn)行。添加索引

Elasticsearch添加數(shù)據(jù)時(shí)需要用到索引——保存相關(guān)數(shù)據(jù)的地方。索引實(shí)際上是指向一個(gè)或者多個(gè)物理分片的邏輯命名空間。

Elasticsearch是利用分片將數(shù)據(jù)分發(fā)到集群內(nèi)各處的。分片是數(shù)據(jù)的容器,文檔保存在分片內(nèi),分片又被分配到集群內(nèi)的各個(gè)節(jié)點(diǎn)里。當(dāng)你的集群規(guī)模擴(kuò)大或者縮小時(shí),Elasticsearch會(huì)自動(dòng)的在各節(jié)點(diǎn)中遷移分片,使得數(shù)據(jù)仍然均勻分布在集群里。一個(gè)分片可以是主分片或者副本分片。索引內(nèi)任意一個(gè)文檔都?xì)w屬于一個(gè)主分片,所以主分片的數(shù)目決定著索引能夠保存的最大數(shù)據(jù)量。在索引建立的時(shí)候就已經(jīng)確定了主分片數(shù),但是副本分片數(shù)可以隨時(shí)修改。添加節(jié)點(diǎn)當(dāng)?shù)诙€(gè)節(jié)點(diǎn)加入到集群后,3個(gè)副本分片將會(huì)分配到這個(gè)節(jié)點(diǎn)上——每個(gè)主分片對(duì)應(yīng)一個(gè)副本分片。這意味著當(dāng)集群內(nèi)任何一個(gè)節(jié)點(diǎn)出現(xiàn)問題時(shí),我們的數(shù)據(jù)都完好無損。當(dāng)?shù)谌齻€(gè)節(jié)點(diǎn)加入到集群后,為了分散負(fù)載而對(duì)分片進(jìn)行重新分配。擁有6個(gè)分片(3個(gè)主分片和3個(gè)副本分片)的索引可以最大擴(kuò)容到6個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)上存在一個(gè)分片,并且每個(gè)分片擁有所在節(jié)點(diǎn)的全部資源。如果我們想要擴(kuò)容超過6個(gè)節(jié)點(diǎn),可以修改副本分片數(shù)量。故障處理如果關(guān)閉節(jié)點(diǎn)或遇到意外情況掛掉節(jié)點(diǎn),發(fā)生的第一件事情就是選舉一個(gè)新的主節(jié)點(diǎn):Node2。

新的主節(jié)點(diǎn)立即將分片在Node2和Node3上對(duì)應(yīng)的副本分片提升為主分片。如果我們同樣關(guān)閉了Node2,依然可以保持在不丟任何數(shù)據(jù)的情況下運(yùn)行,因?yàn)镹ode3為每一個(gè)分片都保留著一份副本。內(nèi)部分片原理使文本可被搜索如何使文本可被搜索,最好的支持一個(gè)字段多個(gè)值就是使用倒排索引,這個(gè)倒排索引相比特定詞項(xiàng)出現(xiàn)過的文檔列表,會(huì)包含更多其它信息。它會(huì)保存每一個(gè)詞項(xiàng)出現(xiàn)過的文檔總數(shù),在對(duì)應(yīng)的文檔中一個(gè)具體詞項(xiàng)出現(xiàn)的總次數(shù),詞項(xiàng)在文檔中的順序,每個(gè)文檔的長度,所有文檔的平均長度,等等。倒排索引被寫入磁盤后是不可改變的:它永遠(yuǎn)不會(huì)修改。Elasticsearch基于Lucene,引入了按段搜索的概念。每一

段本身都是一個(gè)倒排索引,但索引在Lucene中除表示所有段的集合外,還增加了

提交點(diǎn)

的概念—一個(gè)列出了所有已知段的文件一個(gè)

Lucene索引

我們?cè)贓lasticsearch稱作

分片

。一個(gè)Elasticsearch

索引是分片的集合。動(dòng)態(tài)更新索引流程如下:新文檔被收集到內(nèi)存索引緩存。不時(shí)地,緩存被提交:一個(gè)新的段—?一個(gè)追加的倒排索引—?被寫入磁盤。一個(gè)新的包含新段名字的提交點(diǎn)被寫入磁盤。磁盤進(jìn)行同步—所有在文件系統(tǒng)緩存中等待的寫入都刷新到磁盤,以確保它們被寫入物理文件。3.新的段被開啟,讓它包含的文檔可見以被搜索。4.內(nèi)存緩存被清空,等待接收新的文檔。近實(shí)時(shí)搜索Lucene允許新段被寫入和打開—?使其包含的文檔在未進(jìn)行一次完整提交時(shí)便對(duì)搜索可見。這種方式比進(jìn)行一次提交代價(jià)要小得多,并且在不影響性能的前提下可以被頻繁地執(zhí)行。隨著按段(per-segment)搜索的發(fā)展,一個(gè)新的文檔從索引到可被搜索的延遲顯著降低了。新文檔在幾分鐘之內(nèi)即可被檢索,但這樣還是不夠快。磁盤在這里成為了瓶頸。提交(Commiting)一個(gè)新的段到磁盤需要一個(gè)fsync來確保段被物理性地寫入磁盤,這樣在斷電的時(shí)候就不會(huì)丟失數(shù)據(jù)。但是fsync操作代價(jià)很大;如果每次索引一個(gè)文檔都去執(zhí)行一次的話會(huì)造成很大的性能問題。近實(shí)時(shí)搜索在Elasticsearch中,寫入和打開一個(gè)新段的輕量的過程叫做

refresh

。默認(rèn)情況下每個(gè)分片會(huì)每秒自動(dòng)刷新一次。文檔的變化并不是立即對(duì)搜索可見,但會(huì)在一秒之內(nèi)變?yōu)榭梢?。持久化變更在?dòng)態(tài)更新索引中,一次完整的提交會(huì)將段刷到磁盤,并寫入一個(gè)包含所有段列表的提交點(diǎn),為了確保兩次提交之間發(fā)生變化的文檔不會(huì)丟失Elasticsearch增加了一個(gè)

translog

,或者叫事務(wù)日志,在每一次對(duì)Elasticsearch進(jìn)行操作時(shí)均進(jìn)行了日志記錄。工作流程:1.一個(gè)文檔被索引之后,就會(huì)被添加到內(nèi)存緩沖區(qū),并且追加到了translog。持久化變更在動(dòng)態(tài)更新索引中,提到一次完整的提交會(huì)將段刷到磁盤,并寫入一個(gè)包含所有段列表的提交點(diǎn),為了確保兩次提交之間發(fā)生變化的文檔不會(huì)丟失Elasticsearch增加了一個(gè)

translog

,或者叫事務(wù)日志,在每一次對(duì)Elasticsearch進(jìn)行操作時(shí)均進(jìn)行了日志記錄。工作流程:2.刷新(refresh),分片每秒被刷新(refresh)一次:這些在內(nèi)存緩沖區(qū)的文檔被寫入到一個(gè)新的段中,且沒有進(jìn)行fsync操作。這個(gè)段被打開,使其可被搜索。內(nèi)存緩沖區(qū)被清空。刷新(refresh)完成后,緩存被清空但是事務(wù)日志不會(huì)持久化變更在動(dòng)態(tài)更新索引中,提到一次完整的提交會(huì)將段刷到磁盤,并寫入一個(gè)包含所有段列表的提交點(diǎn),為了確保兩次提交之間發(fā)生變化的文檔不會(huì)丟失Elasticsearch增加了一個(gè)

translog

,或者叫事務(wù)日志,在每一次對(duì)Elasticsearch進(jìn)行操作時(shí)均進(jìn)行了日志記錄。工作流程:3.繼續(xù)這個(gè)過程,更多的文檔被添加到內(nèi)存緩沖區(qū)和追加到事務(wù)日志持久化變更工作流程:4.每隔一段時(shí)間默認(rèn)是三十分鐘或者translog超過閾值,?索引被刷新(flush);一個(gè)新的translog被創(chuàng)建,并且一個(gè)全量提交被執(zhí)行。所有在內(nèi)存緩沖區(qū)的文檔都被寫入一個(gè)新的段。緩沖區(qū)被清空。一個(gè)提交點(diǎn)被寫入硬盤。文件系統(tǒng)緩存通過fsync被刷新(flush)。老的translog被刪除。執(zhí)行一個(gè)提交并且截?cái)鄑ranslog的行為在Elasticsearch被稱作一次

flush

。持久化變更translog提供所有還沒有被刷到磁盤的操作的一個(gè)持久化紀(jì)錄。當(dāng)Elasticsearch啟動(dòng)的時(shí)候,它會(huì)從磁盤中使用最后一個(gè)提交點(diǎn)去恢復(fù)已知的段,并且會(huì)重放translog中所有在最后一次提交后發(fā)生的變更操作。translog也被用來提供實(shí)時(shí)CRUD。當(dāng)你試著通過ID查詢、更新、刪除一個(gè)文檔,它會(huì)在嘗試從相應(yīng)的段中檢索之前,首先檢查translog任何最近的變更。這意味著它總是能夠?qū)崟r(shí)地獲取到文檔的最新版本。段合并由于自動(dòng)刷新流程每秒會(huì)創(chuàng)建一個(gè)新的段,這樣會(huì)導(dǎo)致短時(shí)間內(nèi)的段數(shù)量暴增。而段數(shù)目太多會(huì)帶來較大的麻煩。每一個(gè)段都會(huì)消耗文件句柄、內(nèi)存和cpu運(yùn)行周期。更重要的是,每個(gè)搜索請(qǐng)求都必須輪流檢查每個(gè)段;所以段越多,搜索也就越慢。Elasticsearch通過在后臺(tái)進(jìn)行段合并來解決這個(gè)問題。小的段被合并到大的段,然后這些大的段再被合并到更大的段。段合并的時(shí)候會(huì)將那些舊的已刪除文檔從文件系統(tǒng)中清除。被刪除的文檔(或被更新文檔的舊版本)不會(huì)被拷貝到新的大段中。段合并啟動(dòng)段合并不需要你做任何事。進(jìn)行索引和搜索時(shí)會(huì)自動(dòng)進(jìn)行。具體流程如下:當(dāng)索引的時(shí)候,刷新(refresh)操作會(huì)創(chuàng)建新的段并將段打開以供搜索使用。合并進(jìn)程選擇一小部分大小相似的段,并且在后臺(tái)將它們合并到更大的段中。這并不會(huì)中斷索引和搜索。段合并一旦合并結(jié)束,老的段被刪除新的段被刷新(flush)到了磁盤。新的段被打開用來搜索。老的段被刪除。合并大的段需要消耗大量的I/O和CPU資源,如果任其發(fā)展會(huì)影響搜索性能。Elasticsearch在默認(rèn)情況下會(huì)對(duì)合并流程進(jìn)行資源限制,所以搜索仍然有足夠的資源很好地執(zhí)行。執(zhí)行分布式檢索執(zhí)行分布式檢索分布式檢索需要一種相比傳統(tǒng)數(shù)據(jù)庫更加復(fù)雜的執(zhí)行模型因?yàn)槲覀儾恢啦樵儠?huì)命中哪些文檔:這些文檔有可能在集群的任何分片上。一個(gè)搜索請(qǐng)求必須詢問索引(indexorindices)的所有分片的某個(gè)副本來確定它們是否含有任何匹配的文檔。找到所有的匹配文檔后,多分片中的結(jié)果必須組合成單個(gè)排序列表。為此,搜索被執(zhí)行成一個(gè)兩階段過程,我們稱之為querythenfetch。查詢階段在初始

查詢階段

時(shí),查詢會(huì)廣播到索引中每一個(gè)分片拷貝(主分片或者副本分片)。每個(gè)分片在本地執(zhí)行搜索并構(gòu)建一個(gè)匹配文檔的優(yōu)先隊(duì)列。優(yōu)先隊(duì)列的大小取決于分頁參數(shù)from和size。

from定義了目標(biāo)數(shù)據(jù)的偏移值,size定義當(dāng)前返回的事件數(shù)目。默認(rèn)from為0,size為10,即所有的查詢默認(rèn)僅僅返回前10條數(shù)據(jù)。查詢階段包含以下三個(gè)步驟:客戶端發(fā)送一個(gè)search請(qǐng)求到Node3,Node3就變成了協(xié)調(diào)節(jié)點(diǎn),它會(huì)創(chuàng)建一個(gè)大小為from+size的空優(yōu)先隊(duì)列。Node3將查詢請(qǐng)求轉(zhuǎn)發(fā)到索引的每個(gè)主分片或副本分片中。每個(gè)分片在本地執(zhí)行查詢并添加結(jié)果到大小為from+size的本地有序優(yōu)先隊(duì)列中。每個(gè)分片返回各自優(yōu)先隊(duì)列中所有文檔的ID和排序值給協(xié)調(diào)節(jié)點(diǎn),也就是Node3,它合并這些值到自己的優(yōu)先隊(duì)列中來產(chǎn)生一個(gè)全局排序后的結(jié)果列表。取回階段查詢階段標(biāo)識(shí)哪些文檔滿足搜索請(qǐng)求,但是我們?nèi)匀恍枰』剡@些文檔。具體步驟:協(xié)調(diào)節(jié)點(diǎn)首先決定哪些文檔確實(shí)需要被取回。例如,如果我們的查詢指定了{(lán)"from":90,"size":10},最初的90個(gè)結(jié)果會(huì)被丟棄,只有從第91個(gè)開始的10個(gè)結(jié)果需要被取回。協(xié)調(diào)節(jié)點(diǎn)給持有相關(guān)文檔的每個(gè)分片創(chuàng)建一個(gè)multi-getrequest,并發(fā)送請(qǐng)求給同樣處理查詢階段的分片副本。分片加載文檔體--_source字段—?如果有需要,用元數(shù)據(jù)和高亮搜索(結(jié)果中標(biāo)識(shí)符合的字段)豐富結(jié)果文檔。一旦所有的文檔都被取回了,協(xié)調(diào)節(jié)點(diǎn)返回結(jié)果給客戶端。深度分頁先查后取的過程支持用from和size參數(shù)分頁,但是這是有限制的。需要傳遞信息給協(xié)調(diào)節(jié)點(diǎn)的每個(gè)分片必須先創(chuàng)建一個(gè)from+siz

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論