ElasticSearch面試題_第1頁
ElasticSearch面試題_第2頁
ElasticSearch面試題_第3頁
ElasticSearch面試題_第4頁
ElasticSearch面試題_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1:es介紹Elasticsearch是一個基于Lucene的實(shí)時的分布式搜索和分析引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時搜索,穩(wěn)定,可靠,快速,安裝使用方便?;赗ESTful接口。普通請求是.get?a=1rest請求.get/a/12:全文搜索的工具有哪些Lucene Solr Elasticsearch3:es的bulk的引用場景1.bulk API可以幫助我們同時執(zhí)行多個請求2.create 和index的區(qū)別如果數(shù)據(jù)存在,使用create操作失敗,會提示文檔已經(jīng)存在,使用index則可以成功執(zhí)行。3.可以使用文件操作使用文件的方式vi requestscurl -XPOST

2、/PUT localhost:9200/_bulk -data-binary request;bulk請求可以在URL中聲明/_index 或者/_index/_type4.bulk一次最大處理多少數(shù)據(jù)量bulk會把將要處理的數(shù)據(jù)載入內(nèi)存中,所以數(shù)據(jù)量是有限制的最佳的數(shù)據(jù)量不是一個確定的數(shù)值,它取決于你的硬件,你的文檔大小以及復(fù)雜性,你的索引以及搜索的負(fù)載一般建議是1000-5000個文檔,如果你的文檔很大,可以適當(dāng)減少隊(duì)列,大小建議是5-15MB,默認(rèn)不能超過100M,可以在es的配置文件中修改這個值http.max_content_length: 100mb5.版本控制的一個問題在讀數(shù)據(jù)與

3、寫數(shù)據(jù)之間如果有其他線程進(jìn)行寫操作,就會出問題,es使用版本控制才避免這種問題。在修改數(shù)據(jù)的時候指定版本號,操作一次版本號加1。6.es的兩個web訪問工具BigDesk Plugin (作者 Luká? Vl?ek) 簡介:監(jiān)控es狀態(tài)的插件,推薦!主要提供的是節(jié)點(diǎn)的實(shí)時狀態(tài)監(jiān)控,包括jvm的情況,linux的情況,elasticsearch的情況Elasticsearch Head Plugin (作者 Ben Birch) 簡介:很方便對es進(jìn)行各種操作的客戶端。4:核心概念集群 cluster*代表一個集群,集群中有多個節(jié)點(diǎn),其中有一個為主節(jié)點(diǎn),這個主節(jié)點(diǎn)是可以通過

4、選舉產(chǎn)生的,主從節(jié)點(diǎn)是對于集群內(nèi)部來說的。es的一個概念就是去中心化,字面上理解就是無中心節(jié)點(diǎn),這是對于集群外部來說的,因?yàn)閺耐獠縼砜磂s集群,在邏輯上是個整體,你與任何一個節(jié)點(diǎn)的通信和與整個es集群通信是等價(jià)的。主節(jié)點(diǎn)的職責(zé)是負(fù)責(zé)管理集群狀態(tài),包括管理分片的狀態(tài)和副本的狀態(tài),以及節(jié)點(diǎn)的發(fā)現(xiàn)和刪除。只需要在同一個網(wǎng)段之內(nèi)啟動多個es節(jié)點(diǎn),就可以自動組成一個集群。默認(rèn)情況下es會自動發(fā)現(xiàn)同一網(wǎng)段內(nèi)的節(jié)點(diǎn),自動組成集群。分片 shards*代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引

5、創(chuàng)建前指定,并且索引創(chuàng)建后不能更改??梢栽趧?chuàng)建索引庫的時候指定curl -XPUT 'localhost:9200/test1/' -d'"settings":"number_of_shards":3'默認(rèn)是一個索引庫有5個分片index.number_of_shards: 5副本 replicas*代表索引副本,es可以給索引設(shè)置副本,副本的作用一是提高系統(tǒng)的容錯性,當(dāng)某個節(jié)點(diǎn)某個分片損壞或丟失時可以從副本中恢復(fù)。二是提高es的查詢效率,es會自動對搜索請求進(jìn)行負(fù)載均衡??梢栽趧?chuàng)建索引庫的時候指定,副本數(shù)后期可

6、以更改。curl -XPUT 'localhost:9200/test2/' -d'"settings":"number_of_replicas":2'默認(rèn)是一個分片有1個副本index.number_of_replicas: 1數(shù)據(jù)重新分布 recovery *代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布,es在有節(jié)點(diǎn)加入或退出時會根據(jù)機(jī)器的負(fù)載對索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動時也會進(jìn)行數(shù)據(jù)恢復(fù)。數(shù)據(jù)的持久化操作 gateway*代表es索引的持久化存儲方式,es默認(rèn)是先把索引存放到內(nèi)存中,當(dāng)內(nèi)存滿了時再持

7、久化到硬盤。當(dāng)這個es集群關(guān)閉再重新啟動時就會從gateway中讀取索引數(shù)據(jù)。es支持多 種類型的gateway,有本地文件系統(tǒng)(默認(rèn)),分布式文件系統(tǒng),Hadoop的HDFS和amazon的s3云存儲服務(wù)。自動發(fā)現(xiàn)機(jī)制 discovery.zen*代表es的自動發(fā)現(xiàn)節(jié)點(diǎn)機(jī)制,es是一個基于p2p的系統(tǒng),它先通過廣播尋找存在的節(jié)點(diǎn),再通過多播協(xié)議來進(jìn)行節(jié)點(diǎn)之間的通信,同時也支持點(diǎn)對點(diǎn)的交互。集群或節(jié)點(diǎn)與客戶端交互的方式 Transport*代表es內(nèi)部節(jié)點(diǎn)或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進(jìn)行交互,同時它支持http協(xié)議(json格式)、thrift、ser

8、vlet、memcached、zeroMQ等的傳輸協(xié)議(通過插件方式集成)。index 和rdbms中的數(shù)據(jù)庫相似type 表document 行field 列5:serachType四種搜索類型,詳細(xì)介紹分布式搜索的流程先把查詢請求發(fā)送給集群的某一個節(jié)點(diǎn)某個節(jié)點(diǎn)把最終的結(jié)果返回給客戶端QUERY_AND_FETCH1:客戶端把請求發(fā)送給集群中的某一個節(jié)點(diǎn),這個節(jié)點(diǎn)會把查詢請求發(fā)送給所有分片去執(zhí)行,2:每個分片會把查詢的數(shù)據(jù)(包含數(shù)據(jù)的分值,以及數(shù)據(jù)的詳細(xì)內(nèi)容)返回給某一個節(jié)點(diǎn)進(jìn)行匯總,排序,然后把這些數(shù)據(jù)返回給客戶端這樣客戶端可能會收到(10*分片數(shù)量) 的數(shù)據(jù)這種方案,數(shù)據(jù)量和排名都有問題

9、。優(yōu)點(diǎn):效率高,查詢速度快QUERY_THEN_FETCH(默認(rèn))1:客戶端把請求發(fā)送給集群中的某一個節(jié)點(diǎn),這個節(jié)點(diǎn)會把查詢請求發(fā)送給所有分片去執(zhí)行,2:每個分片會把查詢的數(shù)據(jù)(包含數(shù)據(jù)的分值,以及數(shù)據(jù)ID)返回給某一個節(jié)點(diǎn)進(jìn)行匯總,排序,取前10名3:根據(jù)前10名的id到對應(yīng)的分片查詢數(shù)據(jù)的詳細(xì)內(nèi)容,返回給客戶端這種方案,解決了數(shù)據(jù)量的問題。但是排名還有有問題。(DFS:初始化散發(fā)過程)DFS_QUERY_AND_FETCH1:在查詢之前,會把所有分片的詞頻和文檔頻率(打分依據(jù))匯總到一塊2:客戶端把請求發(fā)送給集群中的某一個節(jié)點(diǎn),這個節(jié)點(diǎn)會把查詢請求發(fā)送給所有分片去執(zhí)行,3:每個分片會把查詢

10、的數(shù)據(jù)(包含數(shù)據(jù)的分值,以及數(shù)據(jù)的詳細(xì)內(nèi)容)返回 給某一個節(jié)點(diǎn)進(jìn)行匯總,排序,然后把這些數(shù)據(jù)返回給客戶端解決了排名的問題還存在數(shù)據(jù)量的問題DFS_QUERY_THEN_FETCH1:在查詢之前,會把所有分片的詞頻和文檔頻率(打分依據(jù))匯總到一塊2:客戶端把請求發(fā)送給集群中的某一個節(jié)點(diǎn),這個節(jié)點(diǎn)會把查詢請求發(fā)送給所有分片去執(zhí)行,3:每個分片會把查詢的數(shù)據(jù)(包含數(shù)據(jù)的分值,以及數(shù)據(jù)ID)返回給某一個節(jié)點(diǎn)進(jìn)行匯總,排序,取前10名4:根據(jù)前10名的id到對應(yīng)的分片查詢數(shù)據(jù)的詳細(xì)內(nèi)容,返回給客戶端既解決了排名問題,也解決了數(shù)據(jù)量的問題但是性能最低總結(jié)一下,從性能考慮QUERY_AND_FETCH是最快

11、的,DFS_QUERY_THEN_FETCH是最慢的。從搜索的準(zhǔn)確度來說,DFS要比非DFS的準(zhǔn)確度更高。高亮 補(bǔ):高亮的注意事項(xiàng):高亮的內(nèi)容和原始內(nèi)容是分開返回的高亮字段的內(nèi)容必須在es中存儲(是否存儲這個屬性的值必須是true)分組:分組統(tǒng)計(jì)數(shù)量或者分組統(tǒng)計(jì)分?jǐn)?shù)刪除索引庫:兩種方式xurl或者java apiTimeout : 6:建立索引和查詢的流程建立索引的流程:首先根據(jù)空白符進(jìn)行分割再切分關(guān)鍵詞,去除停用詞,如果有英文全部轉(zhuǎn)換為小寫,對切分的關(guān)鍵詞建立索引,每個關(guān)鍵詞都有對應(yīng)的id,還有一個倒排索引隊(duì)列存儲該關(guān)鍵詞出現(xiàn)在文檔的id,在該文檔出現(xiàn)的次數(shù),在該文檔出現(xiàn)的位置查詢

12、的流程:首先根據(jù)空白符進(jìn)行分割,再切分關(guān)鍵詞,去除停用詞,如果有英文全部轉(zhuǎn)換為小寫,將切分后的到的關(guān)鍵詞和索引庫進(jìn)行匹配中文分詞器-IKes官方提供的分詞插件對中文分詞效果不是很好,可以集成ik分詞,對中文分詞效果比較好如果想根據(jù)自己的規(guī)則進(jìn)行分詞,可以自定義分詞庫,自定義分詞庫文件必須以.dic結(jié)尾,詞庫文件的編碼為utf8 without bom,一個詞語一行,將自定義的文件庫加入到ES_HOME/config/ik/ 目錄下,修改ik的配置文件,重啟生效7:為什么使用索引工具查詢快(使用了倒排索引的技術(shù),大致介紹一下倒排索引,還有索引庫中的詞都是按照順序排列 ,后期根據(jù)一個關(guān)鍵詞查詢的時

13、候,可以利用類似折半查找的算法,查詢效率非常高)使用了倒排索引的技術(shù),一般我們都是這樣定義id 關(guān)鍵詞,倒排索引是關(guān)鍵詞 id正好相反,使用索引工具進(jìn)行查詢時,首先得到關(guān)鍵詞,建立倒排索引表,關(guān)鍵詞-索引列表包含該關(guān)鍵詞所在的文檔的id、在該文檔中出現(xiàn)的次數(shù)、在該文檔中出現(xiàn)的位置信息,這種由屬性值確定記錄的位置的方式成為倒排索引。還有 索引庫中的詞都是按照順序排列 ,后期根據(jù)一個關(guān)鍵詞查詢的時候,可以利用類似折半查找的算法,查詢效率非常高8.setting 與mapping 作用settings修改索引庫默認(rèn)配置例如:分片數(shù)量,副本數(shù)量查看:curl -XGET https

14、:/localhost:9200/crxy/_settings?pretty(操作不存在索引)curl -XPUT 'localhost:9200/crxy/' -d'"settings":"number_of_shards":3,"number_of_replicas":2'(操作已存在索引)curl -XPUT 'localhost:9200/crxy/_settings' -d'"index":"number_of_replicas"

15、:2'Mapping,動態(tài)mapping機(jī)制:這個機(jī)制會自定識別參數(shù)值的類型,自動給這個參數(shù)設(shè)置屬性好處:操作方便,不需要提前考慮這個字段是否在es中定義過。弊端:針對一個未知的數(shù)據(jù),本來不應(yīng)該存儲的,這樣也會存儲了,對數(shù)據(jù)基本沒有什么可控性在實(shí)際開發(fā)中,如果數(shù)據(jù)類型已知,建議還是關(guān)閉自動mapping。如果數(shù)據(jù)類型未知,只能使用自定mapping機(jī)制9:分片查詢方式:es中默認(rèn)的分片查詢方式為隨機(jī)從分片中取數(shù)據(jù),其他的分片查詢方式還有如:_local:查詢操作首先在本地查找,如果本地沒有再到其他節(jié)點(diǎn)進(jìn)行查找_primary:只在主分片中查詢_shads:按照指定的分片進(jìn)行查詢,這種查

16、詢方式實(shí)現(xiàn)了es的極速查詢(在存儲數(shù)據(jù)的時候通過rooting參數(shù)可以指定將數(shù)據(jù)分配到某一個分片中,rooting參數(shù)值相同的分配到一個分片中,后期查詢時可以根據(jù)rooting參數(shù)值指定到哪個分片中查找,從而實(shí)現(xiàn)了極速查詢)修改源碼自定義從多個節(jié)點(diǎn)進(jìn)行查詢等10:es集群的腦裂問題es集群有可能會出現(xiàn)腦裂問題,原因主要有兩個:1)如果集群中節(jié)點(diǎn)不在同一個網(wǎng)段有可能是網(wǎng)絡(luò)延遲造成的2)如果集群中的節(jié)點(diǎn)在同一個網(wǎng)段,有可能是主節(jié)點(diǎn)負(fù)載太大造成的解決方案主要有兩種:1) 把主從節(jié)點(diǎn)的職責(zé)分離,設(shè)置三個儲備主節(jié)點(diǎn), node.master=true,node.data=false從節(jié)點(diǎn)只存儲數(shù)據(jù),no

17、de.master=false,node.data=true2)增加延遲時間將儲備主節(jié)點(diǎn)數(shù)最小設(shè)為n/2+1個11:優(yōu)化適當(dāng)調(diào)大系統(tǒng)打開的最大打開文件數(shù),默認(rèn)為1024修改配置文件調(diào)整es的jvm內(nèi)存的大小,根據(jù)服務(wù)器內(nèi)存的大小,一般分配60%左右,默認(rèn)是256M分片的數(shù)量最好設(shè)置為5-20個(es中一個分片最多存20G的數(shù)據(jù),分片數(shù)在創(chuàng)建索引庫時就指定,而且創(chuàng)建后不能修改,分片數(shù)最少設(shè)置為:數(shù)據(jù)量/20G個, 如果所有分片都存滿數(shù)據(jù),需要再重新建立索引庫)分片設(shè)置的過多過少都會導(dǎo)致檢索比較慢,分片數(shù)過多會導(dǎo)致檢索時打開比較多的文件,也會導(dǎo)致多臺服務(wù)器之間的通信;分片數(shù)過少會導(dǎo)致單個分片索引過

18、大,所以檢索速度慢。副本數(shù)多可以提升搜索能力,但是如果設(shè)置的副本數(shù)過多也會對服務(wù)器造成額外的壓力,因?yàn)樾枰綌?shù)據(jù),所以設(shè)置2-3個即可定時對索引進(jìn)行優(yōu)化,合并索引片段,一個索引片段的最好不要超過1G,將多個索引片段合并成一個大的索引片段時,不要太大,太大打開會很慢。刪除一條數(shù)據(jù)時不會立即刪除,而是產(chǎn)生一個.del的文件,在檢索過程中這部分?jǐn)?shù)據(jù)也會參與檢索,在檢索過程中會判斷是否刪除了,如果刪除了再過濾掉,這樣會降低檢索效率,可以定時執(zhí)行curl命令進(jìn)行刪除或通過程序代碼進(jìn)行刪除。如果項(xiàng)目開始的時候需要批量入庫大量數(shù)據(jù),建議將副本數(shù)設(shè)為0,因?yàn)楦北敬嬖?,?shù)據(jù)要同步到副本,增加es的壓力,索引完

19、成后再將副本數(shù)修改過來,這樣可以提高索引效率。去掉mapping中的_all域,這個雖然會給查詢帶來方便,但是會增加索引時間和所以尺寸Log輸出的水平默認(rèn)為trace,查詢超過500ms即為慢查詢,就要打日志,造成cpu,內(nèi)存,io負(fù)載很高,把log水平調(diào)為info或是修改配置將查詢超時時間調(diào)的長一些。12:典型的應(yīng)用場景es+hbase利用兩個框架的優(yōu)點(diǎn)實(shí)現(xiàn)快速復(fù)雜查詢和海量數(shù)據(jù)存儲Es+hbase:利用這兩個框架的優(yōu)點(diǎn)實(shí)現(xiàn)快速復(fù)雜查詢和海量數(shù)據(jù)存儲。Es通過建立索引實(shí)現(xiàn)快速查詢,它也可以存儲但是不適合海量數(shù)據(jù)的存儲,只存儲需要那些需要從索引庫中直接返回給客戶的內(nèi)容Hbase適合海量數(shù)據(jù)存儲,按rowkey查詢可以實(shí)現(xiàn)快速查詢,但是按列查詢效率不高,所以結(jié)合es實(shí)現(xiàn)按字段快速查詢例如:針對海量的文章數(shù)據(jù)進(jìn)行存儲和快速復(fù)雜查詢服務(wù)就可以通過e

溫馨提示

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

評論

0/150

提交評論