lucene 索引文件結(jié)構(gòu)分析
在分析 lucene 的索引文件結(jié)構(gòu)之前,我們先要理解反向索引(inverted index)這個概念,反向索引是一種以索引項為中心來組織文檔的方式,每個索引項指向一個文檔序列,這個序列中的文檔都包含該索引項。相反,在正向索引中,文檔占據(jù)了中心的位置,每個文檔指向了一個它所包含的索引項的序列。你可以利用反向索引輕松的找到那些文檔包含了特定的索引項。lucene正是使用了反向索引作為其基本的索引結(jié)構(gòu)。
索引文件的邏輯視圖
在lucene 中有索引塊的概念,每個索引塊包含了一定數(shù)目的文檔。我們能夠?qū)为毜乃饕龎K進行檢索。圖 2 顯示了 lucene 索引結(jié)構(gòu)的邏輯視圖。索引塊的個數(shù)由索引的文檔的總數(shù)以及每個索引塊所能包含的最大文檔數(shù)來決定。
圖2:索引文件的邏輯視圖
lucene 中的關(guān)鍵索引文件
下面的部分將會分析lucene中的主要的索引文件,可能分析有些索引文件的時候沒有包含文件的所有的字段,但不會影響到對索引文件的理解。
1.索引塊文件
這個文件包含了索引中的索引塊信息,這個文件包含了每個索引塊的名字以及大小等信息。表 2 顯示了這個文件的結(jié)構(gòu)信息。
表2:索引塊文件結(jié)構(gòu)
2.域信息文件
我們知道,索引中的文檔由一個或者多個域組成,這個文件包含了每個索引塊中的域的信息。表 3 顯示了這個文件的結(jié)構(gòu)。
表3:域信息文件結(jié)構(gòu)
3.索引項信息文件
這是索引文件里面最核心的一個文件,它存儲了所有的索引項的值以及相關(guān)信息,并且以索引項來排序。表 4 顯示了這個文件的結(jié)構(gòu)。
表4:索引項信息文件結(jié)構(gòu)
4.頻率文件
這個文件包含了包含索引項的文檔的列表,以及索引項在每個文檔中出現(xiàn)的頻率信息。如果lucene在索引項信息文件中發(fā)現(xiàn)有索引項和搜索詞相匹配。那么 lucene 就會在頻率文件中找有哪些文件包含了該索引項。表5顯示了這個文件的一個大致的結(jié)構(gòu),并沒有包含這個文件的所有字段。
表5:頻率文件的結(jié)構(gòu)
5.位置文件
這個文件包含了索引項在每個文檔中出現(xiàn)的位置信息,你可以利用這些信息來參與對索引結(jié)果的排序。表 6 顯示了這個文件的結(jié)構(gòu)
表6:位置文件的結(jié)構(gòu)
到目前為止我們介紹了 lucene 中的主要的索引文件結(jié)構(gòu),希望能對你理解 lucene 的物理的存儲結(jié)構(gòu)有所幫助。