分佈式搜索引擎的面試連環炮
- 倒排索引是什麼
- lucene 和 es 的前世今生
- es 的分佈式架構原理能說一下麼(es 是如何實現分佈式的啊)?
- es 寫入數據的工作原理是什麼啊?es 查詢數據的工作原理是什麼啊?底層的 lucene 介紹一下唄?倒排索引瞭解嗎?
- es 在數據量很大的情況下(數十億級別)如何提高查詢效率啊?
- es 生產集羣的部署架構是什麼?每個索引的數據量大概有多少?每個索引大概有多少個分片?
面試題
倒排索引是什麼?
倒排索引適用於快速的全文檢索,一個倒排索引由文檔中所有不重複詞的列表構成,對於其中每個詞,有一個包含它的文檔列表
例如:
假設文檔集合中包含五個文檔,每個文檔的內容如下所示,在圖中最左端一欄是每個文檔對應的編號,我們的任務就是對這個文檔集合建立倒排索引
中文和英文等語言不通,單詞之間沒有明確分割符號,所以首先要用分詞系統將文檔自動切分成單詞序列,這樣每個文檔就轉換爲由單詞序列構成的數據流,爲了系統後續處理方便,需要對每個不同的單詞賦予唯一的單詞編號,同時記錄下哪些文檔包含這個單詞,在如此處理結束後,我們就可以得到最簡單的倒排索引了
索引系統還可以記錄除此之外的更多信息,下圖是記錄了單詞出現的頻率(TF)即這個單詞在文檔中出現的次數,之所以要記錄這個信息,是因爲詞頻信息在搜索結果排序時,計算查詢和文檔相似度是很重要的一個計算因子,所以將其記錄在倒排列表中,以便後續排序時進行分值計算。
倒排列表還可以記錄單詞在某個文檔出現的位置信息
(1, <11>, 1), (2, <7>, 1), (3, <3, 9>, 2)
有了這個索引系統,搜索引擎可以很方便地響應用戶的查詢,比如用戶輸入查詢詞 "Facebook",搜索系統查找倒排索引,從中可以讀出包含這個單詞的文檔,這些文檔就是提供給用戶的搜索結果,而利用單詞頻率信息,文檔頻率信息即可以對這些候選搜索結果進行排序,計算文檔和查詢的相似性,按照相似性得分由高到低排序輸出,此即爲搜索系統的部分內部流程。