110道 Elasticsearch面試題及答案(持續更新)


最新Elasticsearch面試題【附答案解析】ES面試題及答案,ES最新面試題及答案,ES面試題新答案已經全部更新完了,有些答案是自己總結的,也有些答案是在網上搜集整理的。這些答案難免會存在一些錯誤,僅供大家參考。如果發現錯誤還望大家多多包涵,不吝賜教,謝謝~

如果不背 ES面試題的答案,肯定面試會掛!

這套ES面試題大全,希望對大家有幫助哈~

博主已將以下這些面試題整理成了一個面試手冊,是PDF版的

1、詳細描述一下Elasticsearch搜索的過程?

面試官:想了解ES搜索的底層原理,不再只關注業務層面了。

搜索拆解為“query then fetch” 兩個階段。

query階段的目的:定位到位置,但不取。

步驟拆解如下:

1、 假設一個索引數據有5主+1副本 共10分片,一次請求會命中(主或者副本分片中)的一個。

2、 每個分片在本地進行查詢,結果返回到本地有序的優先隊列中。

3、 第2)步驟的結果發送到協調節點,協調節點產生一個全局的排序列表。

fetch階段的目的:取數據。

路由節點獲取所有文檔,返回給客戶端。

2、Beats 如何與 Elasticsearch 結合使用?

Beats是一種開源工具,可以將數據直接傳輸到 Elasticsearch 或通過 logstash,在使用Kibana進行查看之前,可以對數據進行處理或過濾。

傳輸的數據類型包含:審核數據,日志文件,雲數據,網絡流量和窗口事件日志等。

3、解釋一下 Elasticsearch 的 分片?

當文檔數量增加,硬盤容量和處理能力不足時,對客戶端請求的響應將延遲。

在這種情況下,將索引數據分成小塊的過程稱為分片,可改善數據搜索結果的獲取。

4、精准匹配檢索和全文檢索匹配檢索的不同?

兩者的本質區別:

精確匹配用於:是否完全一致?

舉例:郵編、身份證號的匹配往往是精准匹配。

全文檢索用於:是否相關?

舉例:類似B站搜索特定關鍵詞如“馬保國 視頻”往往是模糊匹配,相關的都返回就可以。

5、您能否說明當前可下載的穩定Elasticsearch版本?

Elasticsearch 當前最新版本是7.10(2020年11月21日)。

為什么問這個問題?ES 更新太快了,應聘者如果了解並使用最新版本,基本能說明他關注 ES 更新。甚至從更廣維度講,他關注技術的迭代和更新。

但,不信你可以問問,很多求職者只知道用了 ES,什么版本一概不知。

6、您能解釋一下 Elasticsearch 中的 Explore API 嗎?

沒有用過,這是 Graph (收費功能)相關的API。

點到為止即可,類似問題實際開發現用現查,類似問題沒有什么意義。

https://www.elastic.co/guide/en/elasticsearch/reference/current/graph-explore-api.html

7、elasticsearch了解多少,說說你們公司es的集群架構,索引數據大小,分片有多少,以及一些調優手段 。

面試官:想了解應聘者之前公司接觸的ES使用場景、規模,有沒有做過比較大規模的索引設計、規划、調優。

如實結合自己的實踐場景回答即可。

比如:ES集群架構13個節點,索引根據通道不同共20+索引,根據日期,每日遞增20+,索引:10分片,每日遞增1億+數據,

每個通道每天索引大小控制:150GB之內。

僅索引層面調優手段:

設計階段調優

1、 根據業務增量需求,采取基於日期模板創建索引,通過roll over API滾動索引;

2、 使用別名進行索引管理;

3、 每天凌晨定時對索引做force_merge操作,以釋放空間;

4、 采取冷熱分離機制,熱數據存儲到SSD,提高檢索效率;冷數據定期進行shrink操作,以縮減存儲;

5、 采取curator進行索引的生命周期管理;

6、 僅針對需要分詞的字段,合理的設置分詞器;

7、 Mapping階段充分結合各個字段的屬性,是否需要檢索、是否需要存儲等。……..

寫入調優

1、 寫入前副本數設置為0;

2、 寫入前關閉refresh_interval設置為-1,禁用刷新機制;

3、 寫入過程中:采取bulk批量寫入;

4、 寫入后恢復副本數和刷新間隔;

5、 盡量使用自動生成的id。

查詢調優

1、 禁用wildcard;

2、 禁用批量terms(成百上千的場景);

3、 充分利用倒排索引機制,能keyword類型盡量keyword;

4、 數據量大時候,可以先基於時間敲定索引再檢索;

5、 設置合理的路由機制。

1.4、其他調優

部署調優,業務調優等。

上面的提及一部分,面試者就基本對你之前的實踐或者運維經驗有所評估了。

8、能列舉過你使用的 X-Pack 命令嗎?

7.1 安全功能免費后,使用了:setup-passwords 為賬號設置密碼,確保集群安全。

9、elasticsearch 全文檢索

(1) 客戶端使用RestFul API向對應的node發送查詢請求

(2)協調節點將請求轉發到所有節點(primary或者replica)所有節點將對應的數據查詢之后返回對應的doc id 返回給協調節點

(3)協調節點將doc進行排序聚合

(4) 協調節點再根據doc id 把查詢請求發送到對應shard的node,返回document

10、你之前公司的ElasticSearch集群,一個Node一般會分配幾個分片?

我們遵循官方建議,一個Node最好不要多於三個shards.

1、我們可以在 Elasticsearch 中執行搜索的各種可能方式有哪些?

核心方式如下:

方式一:基於 DSL 檢索(最常用) Elasticsearch提供基於JSON的完整查詢DSL來定義查詢。

GET /shirts/_search { "query": { "bool": { "filter": [ { "term": { "color": "red" }}, { "term": { "brand": "gucci" }} ] } } }

方式二:基於 URL 檢索

GET /my_index/_search?q=user:seina

方式三:類SQL 檢索

POST /_sql?format=txt { "query": "SELECT * FROM uint-2020-08-17 ORDER BY itemid DESC LIMIT 5" }

功能還不完備,不推薦使用。

2、ElasticSearch對於大數據量(上億量級)的聚合如何實現?

ElasticSearch提供的首個近似聚合是cardinality度量。它提供一個字段的基數,即該字段的distinct或者unique值的數目。它是基於HLL算法的。HLL會先對我們的輸入做哈希運算,然后根據哈希運算結果中的bits做概率估算從而得到基數。其特點是:

可配置的精度,用來控制內存的使用(更精確=更多內存),小的數據集精度是非常高的;我們可以通過配置參數來設置去重需要的固定內存使用量,無論數千還是數十億的唯一值,內存使用量只與你配置的精確度相關 。

圖片

3、詳細描述一下 Elasticsearch 索引文檔的過程

面試官:想了解 ES 的底層原理,不再只關注業務層面了。

這里的索引文檔應該理解為文檔寫入 ES,創建索引的過程。文檔寫入包含:單文檔寫入和批量 bulk 寫入,這里只解釋一下:單文檔寫入流程。

**第一步:**客戶寫集群某節點寫入數據,發送請求。(如果沒有指定路由/協調節點,請求的節點扮演路由節點的角色。)

**第二步:**節點 1 接受到請求后,使用文檔_id 來確定文檔屬於分片 0。請求會被轉到另外的節點,假定節點 3。因此分片 0 的主分片分配到節點 3 上。

**第三步:**節點 3 在主分片上執行寫操作,如果成功,則將請求並行轉發到節點 1和節點 2 的副本分片上,等待結果返回。所有的副本分片都報告成功,節點 3 將向協調節點(節點 1)報告成功,節點 1 向請求客戶端報告寫入成功。

**如果面試官再問:**第二步中的文檔獲取分片的過程?

回借助路由算法獲取,路由算法就是根據路由和文檔 id 計算目標的分片 id 的

過程。

1shard = hash(_routing) % (num_of_primary_shards)

4、elasticsearch 數據預熱

數據預熱是指,每隔一段時間,將熱數據

手動在后台查詢一遍,將熱數據刷新到fileSystem cache上

5、如何使用 Elasticsearch Tokenizer?

Tokenizer 接收字符流(如果包含了字符過濾,則接收過濾后的字符流;否則,接收原始字符流),將其分詞。同時記錄分詞后的順序或位置(position),以及開始值(start_offset)和偏移值(end_offset-start_offset)。

6、elasticsearch 數據的寫入原理

es數據寫入原理主要可以分為4個操作:

1、 refresh

2、 commit

3、 flush

4、 merge

操作觸發條件 操作過程

 

 

7、你是如何做 ElasticSearch 寫入調優的?

1)寫入前副本數設置為0;

2)寫入前關閉refresh_interval設置為-1,禁用刷新機制;

3)寫入過程中:采取bulk批量寫入;

4) 寫入后恢復副本數和刷新間隔;

5) 盡量使用自動生成的id。

8、Elasticsearch是如何實現Master選舉的?

1、 Elasticsearch的選主是ZenDiscovery模塊負責的,主要包含Ping(節點之間通過這個RPC來發現彼此)和Unicast(單播模塊包含一個主機列表以控制哪些節點需要ping通)這兩部分;

2、 對所有可以成為master的節點(node.master: true)根據nodeId字典排序,每次選舉每個節點都把自己所知道節點排一次序,然后選出第一個(第0位)節點,暫且認為它是master節點。

3、 如果對某個節點的投票數達到一定的值(可以成為master節點數n/2+1)並且該節點自己也選舉自己,那這個節點就是master。否則重新選舉一直到滿足上述條件。

4、 補充:master節點的職責主要包括集群、節點和索引的管理,不負責文檔級別的管理;data節點可以關閉http功能*。

9、ElasticSearch主分片數量可以在后期更改嗎?為什么?

不可以,因為根據路由算法shard = hash(document_id) % (num_of_primary_shards),當主分片數量變化時會影響數據被路由到哪個分片上。

10、如何監控 Elasticsearch 集群狀態?

Marvel 讓你可以很簡單的通過 Kibana 監控 Elasticsearch。你可以實時查看你的集群健康狀態和性能,也可以分析過去的集群、索引和節點指標。

1、Kibana在Elasticsearch的哪些地方以及如何使用?

Kibana是ELK Stack –日志分析解決方案的一部分。

它是一種開放源代碼的可視化工具,可以以拖拽、自定義圖表的方式直觀分析數據,極大降低的數據分析的門檻。

未來會向類似:商業智能和分析軟件 - Tableau 發展。

2、elasticsearch是如何實現master選舉的

面試官:想了解ES集群的底層原理,不再只關注業務層面了。

前置前提:

1、 只有候選主節點(master:true)的節點才能成為主節點。

2、 最小主節點數(min_master_nodes)的目的是防止腦裂。

這個我看了各種網上分析的版本和源碼分析的書籍,雲里霧里。

核對了一下代碼,核心入口為findMaster,選擇主節點成功返回對應Master,否則返回null。選舉流程大致描述如下:

第一步:確認候選主節點數達標,elasticsearch.yml設置的值discovery.zen.minimum_master_nodes;

第二步:比較:先判定是否具備master資格,具備候選主節點資格的優先返回;若兩節點都為候選主節點,則id小的值會主節點。注意這里的id為string類型。

題外話:獲取節點id的方法。

1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name 2ip port heapPercent heapMax id name

3、客戶端在和集群連接時,是如何選擇特定的節點執行請求的?

TransportClient利用transport模塊遠程連接一個ElasticSearch集群。它並不加入到集群中,只是簡單的獲得一個或者多個初始化的transport地址,並以輪詢的方式與這些地址進行通信。

4、你能告訴我 Elasticsearch 中的數據存儲功能嗎?

Elasticsearch是一個搜索引擎,輸入寫入ES的過程就是索引化的過程,數據按照既定的 Mapping 序列化為Json 文檔實現存儲。

5、Master 節點和 候選 Master節點有什么區別?

主節點負責集群相關的操作,例如創建或刪除索引,跟蹤哪些節點是集群的一部分,以及決定將哪些分片分配給哪些節點。

擁有穩定的主節點是衡量集群健康的重要標志。

而候選主節點是被選具備候選資格,可以被選為主節點的那些節點。

6、介紹下你們電商搜索的整體技術架構。

 

 

7、客戶端在和集群連接時,如何選擇特定的節點執行請求的?

TransportClient 利用 transport 模塊遠程連接一個 elasticsearch 集群。它並不加入到集群中,只是簡單的獲得一個或者多個初始化的 transport 地址,並以 輪詢 的方式與這些地址進行通信。

8、對於 GC 方面,在使用 Elasticsearch 時要注意什么?

1、 SEE

2、 倒排詞典的索引需要常駐內存,無法 GC,需要監控 data node 上 segmentmemory 增長趨勢。

3、 各類緩存,field cache, filter cache, indexing cache, bulk queue 等等,要設置合理的大小,並且要應該根據最壞的情況來看 heap 是否夠用,也就是各類緩存全部占滿的時候,還有 heap 空間可以分配給其他任務嗎?避免采用 clear cache等“自欺欺人”的方式來釋放內存。

4、 避免返回大量結果集的搜索與聚合。確實需要大量拉取數據的場景,可以采用scan & scroll api 來實現。

5、 cluster stats 駐留內存並無法水平擴展,超大規模集群可以考慮分拆成多個集群通過 tribe node 連接。

6、 想知道 heap 夠不夠,必須結合實際應用場景,並對集群的 heap 使用情況做持續的監控。

9、拼寫糾錯是如何實現的?

1、拼寫糾錯是基於編輯距離來實現;編輯距離是一種標准的方法,它用來表示經過插入、刪除和替換操作從一個字符串轉換到另外一個字符串的最小操作步數;

**2、編輯距離的計算過程:**比如要計算 batyu 和 beauty 的編輯距離,先創建一個7×8 的表(batyu 長度為 5,coffee 長度為 6,各加 2),接着,在如下位置填入

黑色數字。

其他格的計算過程是取以下三個值的最小值:

如果最上方的字符等於最左方的字符,則為左上方的數字。否則為左上方的數字 +1。(對於 3,3 來說為 0)左方數字+1(對於 3,3 格來說為 2)上方數字+1(對於 3,3 格來說為 2)

最終取右下角的值即為編輯距離的值 3。

![70_10.png][70_10.png]

對於拼寫糾錯,我們考慮構造一個度量空間(Metric Space),該空間內任何關

系滿足以下三條基本條件:

d(x,y) = 0 -- 假如 x 與 y 的距離為 0,則 x=y

d(x,y) = d(y,x) -- x 到 y 的距離等同於 y 到 x 的距離

d(x,y) + d(y,z) >= d(x,z) -- 三角不等式

1、 根據三角不等式,則滿足與 query 距離在 n 范圍內的另一個字符轉 B,其與 A的距離最大為 d+n,最小為 d-n。

2、 BK 樹的構造就過程如下:每個節點有任意個子節點,每條邊有個值表示編輯距離。所有子節點到父節點的邊上標注 n 表示編輯距離恰好為 n。比如,我們有棵樹父節點是”book”和兩個子

點”cake”和”books”,”book”到”books”的邊標號 :

1、 ”book”到”cake”的邊上標號.

2、 從字典里構造好樹后,無論何時你想插入新單詞時.計算該單詞與根節點的編輯距離,並且查找數值為 d(neweord, root)的邊。遞歸得與各子節點進行比較,直到沒有子節點,你就可以創建新的子節點並將新單詞保存在那。比如,插入”boo”到剛才上述例子的樹中,我們先檢查根節點,查找 d(“book”, “boo”) = 1 的邊,然后檢查標號為1 的邊的子節點,得到單詞”books”。我們再計算距離 d(“books”, “boo”)=2,則將新單詞插在”books”之后,邊標號為 2。

3、 查詢相似詞如下:計算單詞與根節點的編輯距離 d,然后遞歸查找每個子節點標號為 d-n 到 d+n(包含)的邊。假如被檢查的節點與搜索單詞的距離 d 小於n,則返回該節點並繼續查詢。比如輸入 cape 且最大容忍距離為 1,則先計算和根的編輯距離 d(“book”,“cape”)=4,然后接着找和根節點之間編輯距離為 3 到5 的,這個就找到了cake 這個節點,計算 d(“cake”, “cape”)=1,滿足條件所以返回 cake,然后再找和 cake 節點編輯距離是 0 到 2 的,分別找到 cape 和cart 節點,這樣就得到 cape 這個滿足條件的結果。

10、在Elasticsearch中 cat API的功能是什么?

cat API 命令提供了Elasticsearch 集群的分析、概述和運行狀況,其中包括與別名,分配,索引,節點屬性等有關的信息。

這些 cat 命令使用查詢字符串作為其參數,並以J SON 文檔格式返回結果信息。

更多 ES面試題 60道

01、在並發情況下,Elasticsearch 如果保證讀寫一致?

02、ElasticSearch中的倒排索引是什么?

03、elasticsearch 讀取數據

04、拼寫糾錯是如何實現的?

05、介紹下你們電商搜索的整體技術架構。

06、Elasticsearch在部署時,對Linux的設置有哪些優化方法?

07、REST API在 Elasticsearch 方面有哪些優勢?

08、ElasticSearch如何避免腦裂?

09、elasticsearch 全文檢索

10、定義副本、創建副本的好處是什么?

11、elasticsearch的倒排索引是什么

12、Elasticsearch 在部署時,對 Linux 的設置有哪些優化方法

13、詳細描述一下Elasticsearch索引文檔的過程

14、在並發情況下,Elasticsearch 如果保證讀寫一致?

15、請解釋在 Elasticsearch 集群中添加或創建索引的過程?

16、安裝 Elasticsearch 需要依賴什么組件嗎?

17、如何使用 Elastic Reporting ?

18、elasticsearch 是如何實現 master 選舉的

19、在並發情況下,Elasticsearch如果保證讀寫一致?

20、詳細描述一下Elasticsearch更新和刪除文檔的過程。

21、elasticsearch的倒排索引是什么

22、Elasticsearch 在部署時,對 Linux 的設置有哪些優化方法

23、詳細描述一下Elasticsearch索引文檔的過程

24、在並發情況下,Elasticsearch 如果保證讀寫一致?

25、請解釋在 Elasticsearch 集群中添加或創建索引的過程?

26、安裝 Elasticsearch 需要依賴什么組件嗎?

27、如何使用 Elastic Reporting ?

28、elasticsearch 是如何實現 master 選舉的

29、在並發情況下,Elasticsearch如果保證讀寫一致?

30、詳細描述一下Elasticsearch更新和刪除文檔的過程。

31、我們可以在 Elasticsearch 中執行搜索的各種可能方式有哪些?

32、ElasticSearch對於大數據量(上億量級)的聚合如何實現?

33、詳細描述一下 Elasticsearch 索引文檔的過程

34、elasticsearch 數據預熱

35、如何使用 Elasticsearch Tokenizer?

36、elasticsearch 數據的寫入原理

37、你是如何做 ElasticSearch 寫入調優的?

38、Elasticsearch是如何實現Master選舉的?

39、ElasticSearch主分片數量可以在后期更改嗎?為什么?

40、如何監控 Elasticsearch 集群狀態?

41、Kibana在Elasticsearch的哪些地方以及如何使用?

42、elasticsearch是如何實現master選舉的

43、客戶端在和集群連接時,是如何選擇特定的節點執行請求的?

44、你能告訴我 Elasticsearch 中的數據存儲功能嗎?

45、Master 節點和 候選 Master節點有什么區別?

46、介紹下你們電商搜索的整體技術架構。

47、客戶端在和集群連接時,如何選擇特定的節點執行請求的?

48、對於 GC 方面,在使用 Elasticsearch 時要注意什么?

49、拼寫糾錯是如何實現的?

50、在Elasticsearch中 cat API的功能是什么?

51、在並發情況下,Elasticsearch 如果保證讀寫一致?

52、ElasticSearch中的倒排索引是什么?

53、elasticsearch 讀取數據

54、拼寫糾錯是如何實現的?

55、介紹下你們電商搜索的整體技術架構。

56、Elasticsearch在部署時,對Linux的設置有哪些優化方法?

57、REST API在 Elasticsearch 方面有哪些優勢?

58、ElasticSearch如何避免腦裂?

59、elasticsearch 全文檢索

60、定義副本、創建副本的好處是什么?

如果不背 ES面試題的答案,肯定面試會掛!

這套ES面試題大全,希望對大家有幫助哈~

博主已將以下這些面試題整理成了一個面試手冊,是PDF版的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM