Hadoop基礎(五十七):其他面試題ES(二)
來源:https://mp.weixin.qq.com/s/MU87hW3W2S1Fi6CqnnXAGA
問題列表和答案來自國外部落格(原文答案不準確,有錯誤),為避免誤導,我對每個問題做了屬於自己的理解和解答。
問題都非常基礎,文章有點長,但請你耐心把它看完,期望對你的 Elastic 求職有所幫助!
1、簡要介紹一下Elasticsearch?
嚴謹起見,如下一段話直接拷貝官方網站:https://www.elastic.co/cn/elasticsearch/
Elasticsearch 是一個分散式、RESTful 風格的搜尋和資料分析引擎,能夠解決不斷湧現出的各種用例。作為 Elastic Stack 的核心,它集中儲存您的資料,幫助您發現意料之中以及意料之外的情況。
ElasticSearch 是基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。
核心特點如下:
- 分散式的實時檔案儲存,每個欄位都被索引且可用於搜尋。
- 分散式的實時分析搜尋引擎,海量資料下近實時秒級響應。
- 簡單的restful api,天生的相容多語言開發。
- 易擴充套件,處理PB級結構化或非結構化資料。
2、 您能否說明當前可下載的穩定Elasticsearch版本?
Elasticsearch 當前最新版本是7.10(2020年11月21日)。
為什麼問這個問題?ES 更新太快了,應聘者如果瞭解並使用最新版本,基本能說明他關注 ES 更新。甚至從更廣維度講,他關注技術的迭代和更新。
但,不信你可以問問,很多求職者只知道用了 ES,什麼版本一概不知。
3、安裝 Elasticsearch 需要依賴什麼元件嗎?
ES 早期版本需要JDK,在7.X版本後已經集成了 JDK,已無需第三方依賴。
4、您能否分步介紹如何啟動 Elasticsearch 伺服器?
啟動方式有很多種,一般 bin 路徑下
./elasticsearch-d
就可以後臺啟動。
開啟瀏覽器輸入 http://ES IP:9200 就能知道叢集是否啟動成功。
如果啟動報錯,日誌裡會有詳細資訊,逐條核對解決就可以。
5、能列出 10 個使用 Elasticsearch 作為其搜尋引擎或資料庫的公司嗎?
這個問題,銘毅本來想刪掉。但仔細一想,至少能看出求職者的視野夠不夠開闊。
參與過 Elastic中文社群活動或者經常關注社群動態的就知道,公司太多了,列舉如下(排名不分先後):
- 阿里
- 騰訊
- 百度
- 京東
- 美團
- 小米
- 滴滴
- 攜程
- 今日頭條
- 貝殼找房
- 360
- IBM
- 順豐快遞
幾乎我們能想到的網際網路公司都在使用 Elasticsearch。
關注 TOP 網際網路公司的相關技術的動態和技術部落格,也是一種非常好的學習方式。
6、 解釋一下Elasticsearch Cluster?
Elasticsearch 叢集是一組連線在一起的一個或多個 Elasticsearch 節點例項。
Elasticsearch 叢集的功能在於在叢集中的所有節點之間分配任務,進行搜尋和建立索引。
7、解釋一下 Elasticsearch Node?
節點是 Elasticsearch 的例項。實際業務中,我們會說:ES叢集包含3個節點、7個節點。
這裡節點實際就是:一個獨立的 Elasticsearch 程序,一般將一個節點部署到一臺獨立的伺服器或者虛擬機器、容器中。
不同節點根據角色不同,可以劃分為:
- 主節點
幫助配置和管理在整個叢集中新增和刪除節點。
- 資料節點
儲存資料並執行諸如CRUD(建立/讀取/更新/刪除)操作,對資料進行搜尋和聚合的操作。
-
客戶端節點(或者說:協調節點) 將叢集請求轉發到主節點,將與資料相關的請求轉發到資料節點
-
攝取節點
用於在索引之前對文件進行預處理。
8、解釋一下 Elasticsearch叢集中的 索引的概念 ?
Elasticsearch 叢集可以包含多個索引,與關係資料庫相比,它們相當於資料庫表
其他類別概念,如下表所示,點到為止。
9、解釋一下 Elasticsearch 叢集中的 Type 的概念 ?
5.X 以及之前的 2.X、1.X 版本 ES支援一個索引多個type的,舉例 ES 6.X 中的Join 型別在早期版本實際是多 Type 實現的。
在6.0.0 或 更高版本中建立的索引只能包含一個 Mapping 型別。
Type 將在Elasticsearch 7.0.0中的API中棄用,並在8.0.0中完全刪除。
很多人好奇為什麼刪除?看這裡:
https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
10、你能否在 Elasticsearch 中定義對映?
對映是定義文件及其包含的欄位的儲存和索引方式的過程。
例如,使用對映定義:
-
哪些字串欄位應該定義為 text 型別。
-
哪些欄位應該定義為:數字,日期或地理位置 型別。
-
自定義規則來控制動態新增欄位的型別。
11、Elasticsearch的 文件是什麼?
文件是儲存在 Elasticsearch 中的 JSON 文件。它等效於關係資料庫表中的一行記錄。
12、解釋一下 Elasticsearch 的 分片?
當文件數量增加,硬碟容量和處理能力不足時,對客戶端請求的響應將延遲。
在這種情況下,將索引資料分成小塊的過程稱為分片,可改善資料搜尋結果的獲取。
13、定義副本、建立副本的好處是什麼?
副本是 分片的對應副本,用在極端負載條件下提高查詢吞吐量或實現高可用性。
所謂高可用主要指:如果某主分片1出了問題,對應的副本分片1會提升為主分片,保證叢集的高可用。
14、請解釋在 Elasticsearch 叢集中新增或建立索引的過程?
要新增新索引,應使用建立索引 API 選項。建立索引所需的引數是索引的配置Settings,索引中的欄位 Mapping 以及索引別名 Alias。
也可以通過模板 Template 建立索引。
15、在 Elasticsearch 中刪除索引的語法是什麼?
可以使用以下語法刪除現有索引:
DELETE<index_name>
支援萬用字元刪除:
DELETEmy_*
16、在 Elasticsearch 中列出叢集的所有索引的語法是什麼?
GET_cat/indices
17、在索引中更新 Mapping 的語法?
PUTtest_001/_mapping
{
"properties":{
"title":{
"type":"keyword"
}
}
}
18、在Elasticsearch中 按 ID檢索文件的語法是什麼?
GETtest_001/_doc/1
19、解釋 Elasticsearch 中的相關性和得分?
當你在網際網路上搜索有關 Apple 的資訊時。它可以顯示有關水果或蘋果公司名稱的搜尋結果。
-
你可能要線上購買水果,檢查水果中的食譜或食用水果,蘋果對健康的好處。
-
你也可能要檢查Apple.com,以查詢該公司提供的最新產品範圍,檢查評估公司的股價以及最近6個月,1或5年內該公司在納斯達克的表現。
同樣,當我們從 Elasticsearch 中搜索文件(記錄)時,你會對獲取所需的相關資訊感興趣。基於相關性,通過Lucene評分演算法計算獲得相關資訊的概率。
ES 會將相關的內容都返回給你,只是:計算得出的評分高的排在前面,評分低的排在後面。
計算評分相關的兩個核心因素是:詞頻和逆向文件頻率(文件的稀缺性)。
大體可以解釋為:單篇文件詞頻越高、得分越高;多篇文件某詞越稀缺,得分越高。
20、我們可以在 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*FROMuint-2020-08-17ORDERBYitemidDESCLIMIT5"
}
功能還不完備,不推薦使用。
21、Elasticsearch 支援哪些型別的查詢?
查詢主要分為兩種型別:精確匹配、全文檢索匹配。
-
精確匹配,例如 term、exists、term set、 range、prefix、 ids、 wildcard、regexp、 fuzzy等。
-
全文檢索,例如match、match_phrase、multi_match、match_phrase_prefix、query_string 等
22、精準匹配檢索和全文檢索匹配檢索的不同?
兩者的本質區別:
- 精確匹配用於:是否完全一致?
舉例:郵編、身份證號的匹配往往是精準匹配。
- 全文檢索用於:是否相關?
舉例:類似B站搜尋特定關鍵詞如“馬保國 視訊”往往是模糊匹配,相關的都返回就可以。
23、請解釋一下 Elasticsearch 中聚合?
聚合有助於從搜尋中使用的查詢中收集資料,聚合為各種統計指標,便於統計資訊或做其他分析。聚合可幫助回答以下問題:
-
我的網站平均載入時間是多少?
-
根據交易量,誰是我最有價值的客戶?
-
什麼會被視為我網路上的大檔案?
-
每個產品類別中有多少個產品?
聚合的分三類:
主要檢視7.10 的官方文件,早期是4個分類,別大意啊!
- 分桶 Bucket 聚合
根據欄位值,範圍或其他條件將文件分組為桶(也稱為箱)。
- 指標 Metric 聚合
從欄位值計算指標(例如總和或平均值)的指標聚合。
- 管道 Pipeline 聚合
子聚合,從其他聚合(而不是文件或欄位)獲取輸入。
24、你能告訴我 Elasticsearch 中的資料儲存功能嗎?
Elasticsearch是一個搜尋引擎,輸入寫入ES的過程就是索引化的過程,資料按照既定的 Mapping 序列化為Json 文件實現儲存。
25、什麼是Elasticsearch Analyzer?
分析器用於文字分析,它可以是內建分析器也可以是自定義分析器。它的核心三部分構成如下圖所示: