在介紹倒排索引之前,我們先來看看什麼是索引。索引是資料庫當中的概念,維基百科中的說法是「資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料」。可以簡單地把索引當成是字典裡的檢索目錄,我們比如我們要查乙個叫「index」的單詞,通過目錄,可以快速地找到字母i開始的位置。索引也是一樣,不過我們查詢的不再是單詞的首字母,而是資料。
這個反向的索引就是倒排索引。
整個倒排索引的技術應該不難理解,不過實際操作的時候,要複雜一些, 還會涉及很多優化。下面就介紹眾多優化方案當中,應用最廣泛的一種。
elasticsearch身為分布式搜尋引擎,巧妙的設計模式非常多,加上分布式系統本身的複雜性,可以研究的內容很多。今天這篇文章主要講倒排索引,所以簡單聊聊其中關於倒排索引的優化。
複雜度沒有問題,o(logn)的複雜度是可以接受的,不能接受的是磁碟的讀盤。因為這個dictionary實在是太大了,我們每次查詢磁碟是需要開銷的,每一次磁碟的隨機讀取需要消耗10ms的時間。對於乙個高效能的系統來說,這同樣是不能接受的。
我們要優化這個答案,就必須要減少磁碟的隨機讀取。
想要減少使用磁碟,最好的辦法就是把資料放在記憶體裡。但是我們前面說了,這個dictionary太大了,記憶體裡很有可能放不下。所以我們必須再對它做簡單的索引,比如:
……所以為了解決這個問題,我們需要引入乙個資料結構,即字首樹(trie樹)。
一棵字首樹大概長下面這個樣子:
用下圖舉個例子:
如果覺得有所收穫的,順手給個關注吧~
倒排索引原理
這裡介紹乙個基礎的搜尋引擎技術 假如有兩段文字 1,books and friends should be few but good 2,a good book is a good friend 假如我們忽略掉大小寫和複數,可以整理出一張單詞表,顯示哪個單詞再哪段文字,英文單詞 文章編號a2 and...
倒排索引基礎
搜尋引擎的索引 單詞 文件矩陣是表達兩者之間所具有的一種包含關係的概念模型,圖3 1展示了其含義。圖3 1的每列代表乙個文件,每行代表乙個單詞,打對勾的位置代表包含關係。圖3 1 單詞 文件矩陣 從縱向即文件這個維度來看,每列代表文件包含了哪些單詞,比如文件1包含了詞彙1和詞彙4,而不包含其它單詞。...
倒排索引基礎
一 單詞 文件矩陣 搜尋引擎的索引其實就是實現單詞 文件矩陣的具體資料結構,具體可以包括 倒排索引 簽名檔案 字尾樹等。常見的當然就是倒排索引了,lucene也是基於倒排索引實現的。二 倒排索引 1.倒排索引的組成 倒排索引通常有詞彙表和記錄表組成。詞彙表 文件集合中所包含的不同單詞的集合。記錄表 ...