1. 程式人生 > 實用技巧 >Hadoop基礎(五十七):其他面試題ES(二)

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?

分析器用於文字分析,它可以是內建分析器也可以是自定義分析器。它的核心三部分構成如下圖所示:

推薦:Elasticsearch自定義分詞,從一個問題說開去