在談談lucene倒排索引的存儲方式(一)中只說明瞭倒排索引位置相關信息的存儲,並無詳細說明若是須要對位置信息進行隨機訪問,那麼它的索引該如何設計。lucene採用的是多級跳躍鏈表的方式,先說說跳躍鏈表基本思想(其實在前面文中也提過),假設給定一堆排過序的數字,而且數據量很大以致於在內存中放不下,若是要快速隨機訪問其中的某個數值,一種方法是對這些數字每隔必定的條數如1000條就記錄相應的數值以及對應的文件指針,而後把這些數值以及對應的文件指針加載到內存中採用二分查找法找到欲查找數值所在數據塊的起始地址,而後將1000條記錄依次遍歷比較或者加載到內存中採用二分查找均可以,這些數值和文件指針又叫一級跳躍表。.net
若是說一級跳躍表的數據量依然很大,那麼又要在此基礎上再創建一層跳躍表,依此類推就會有多級跳躍表了。值得一提的是級數並非越多越好,由於層級越多,查找的次數也越多,lucene默認最大層級爲10。設計
上圖是lucene官方給出的示圖(一個詞表明的倒排位置索引),d表明文檔,x表明每隔128個文檔進行壓縮的文件指針也是第一層級的索引記錄了相應的文檔ID和所在文件的指針,c分別爲第二層級和第三層級。這樣感受在代碼實現上較複雜的索引結構確在lucene實現的時候顯得很是討巧,由於總的層級能夠預先算出來,而後能夠邊寫邊計算出文檔所在層級。有興趣滴仍是看代碼吧。指針