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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

13、候,可以利用類(lèi)似折半查找的算法,查詢(xún)效率非常高)使用了倒排索引的技術(shù),一般我們都是這樣定義id 關(guān)鍵詞,倒排索引是關(guān)鍵詞 id正好相反,使用索引工具進(jìn)行查詢(xún)時(shí),首先得到關(guān)鍵詞,建立倒排索引表,關(guān)鍵詞-索引列表包含該關(guān)鍵詞所在的文檔的id、在該文檔中出現(xiàn)的次數(shù)、在該文檔中出現(xiàn)的位置信息,這種由屬性值確定記錄的位置的方式成為倒排索引。還有 索引庫(kù)中的詞都是按照順序排列 ,后期根據(jù)一個(gè)關(guān)鍵詞查詢(xún)的時(shí)候,可以利用類(lèi)似折半查找的算法,查詢(xún)效率非常高8.setting 與mapping 作用settings修改索引庫(kù)默認(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,動(dòng)態(tài)mapping機(jī)制:這個(gè)機(jī)制會(huì)自定識(shí)別參數(shù)值的類(lèi)型,自動(dòng)給這個(gè)參數(shù)設(shè)置屬性好處:操作方便,不需要提前考慮這個(gè)字段是否在es中定義過(guò)。弊端:針對(duì)一個(gè)未知的數(shù)據(jù),本來(lái)不應(yīng)該存儲(chǔ)的,這樣也會(huì)存儲(chǔ)了,對(duì)數(shù)據(jù)基本沒(méi)有什么可控性在實(shí)際開(kāi)發(fā)中,如果數(shù)據(jù)類(lèi)型已知,建議還是關(guān)閉自動(dòng)mapping。如果數(shù)據(jù)類(lèi)型未知,只能使用自定mapping機(jī)制9:分片查詢(xún)方式:es中默認(rèn)的分片查詢(xún)方式為隨機(jī)從分片中取數(shù)據(jù),其他的分片查詢(xún)方式還有如:_local:查詢(xún)操作首先在本地查找,如果本地沒(méi)有再到其他節(jié)點(diǎn)進(jìn)行查找_primary:只在主分片中查詢(xún)_shads:按照指定的分片進(jìn)行查詢(xún),這種查

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論