轉載請注明出處:[http://blog.csdn.net/xiaojimanman/article/details/42836309](http://blog.csdn.net/xiaojimanman/article/details/42836309)
前面我們已經介紹了非結構數據的檢索過程以及lucene的數學模型,這篇博客就主要介紹一下lucene索引的文件結構,下圖是lucene生成的索引實例:

lucene索引結構是層次結構,主要有以下幾個層次:
**索引(Index)**
在lucene中,一個索引是放在一個文件夾中的,上述實例中的所有文件就組成了lucene索引
**段(Segment)**
一個索引中可以有很多段,段與段之間是獨立的,添加新的文檔可能會生成新段,不同的段可以合并生成一個新段,上圖中相同的前綴文件就屬于同一個段(圖中共有兩個段 ?_0 和 _1),當段的個數達到一定數量,段與段直接會合并,生成新段;segments.gen和segment_2既是段的元數據文件,也保存了段的屬性信息。
**文檔(Document)**
文檔是創建索引的基本單位,不同的文檔保存在不同的段中,一個段可以包含所個文檔,新添的文檔保存在一個新生成的一個段中,隨著段的合并,不同的段會合并成一個新段。
**域(Field)**
一個文檔包含不同類型的信息,可以拆分開索引,比如小說信息可以有書名、作者名、更新時間、簡介、更新時間等屬性,這些都可以保存在不同的域中。
**詞(Term)**
詞是索引的最小單位,是經過詞法分析和語言處理后的字符串,[上篇博客中](http://blog.csdn.net/xiaojimanman/article/details/42818185)的N維空間向量,每一個維度都是一個詞。
**正向信息&反向信息**
lucene的索引結構中,即保存了正向信息,也保存了反向信息。所謂的正向信息就是安層次保存了從索引一直到詞的包含關系:索引-->段-->文檔-->域-->詞,即此索引包含了哪些段,每個段包含了哪些文檔,每個文檔包含了哪些域,每個域域又包含了那些詞。
如上圖中,包含正向信息的文件有:
segment_2 保存了此索引包含了多少段,每個段包含了多少篇文檔;
xxx.fdx , xxx.fdt 保存了此段的所有文檔,每篇文檔包含了多少域,每個域保存了哪些信息;
xxx.fnm 保存了此段包含了多少域,每個域的名稱以及索引方式;
xxx.tvx , xxx.tvd , xxx.tvf 保存了此段包含了多少文檔,每篇文檔包含了多少域,每個域包含了多少詞,每個詞的字符串、位置等信息。
(這里需要說聲歉意,上圖的索引文件截圖是基于lucene4.3.1創建出來的,文件結構和之前的版本有了很大的改動,自己查找了很多資料都沒有找到新的對應關系,所以這部分還是按照之前的文件結構來介紹的,最后后附錄之前的索引文件結構)
所謂反向信息保存了詞典的倒排表的映射:詞-->文檔,包含反向信息的文件有:
xxx.tis xxx.tii 保存了詞典,即此段包含的所有的詞按字典的順序排序;
xxx.frd 保存了倒排表,也即是每個詞的文檔ID列表;
xxx.prx 保存了倒排表中的每個詞在文檔中的位置。
**lock**
上圖中還有一個重要的write.lock文件,lucene中目前有write.lock和commit.lock兩種,write.lock是在對索引文件進行修改的時候生成的,這個時候IndexWrite的操作或者IndexReader 刪除Document或取消刪除都會拋出異常;commit.lock是在segments文件被讀取活合并的時候生成的,當IndexReader讀取索引文件之前會獲得commit.lock,當segments被讀取完畢的時候會被釋放。
lucene3.0的索引文件結構如下圖:

注:關于lucene4.3.1創建的文件結構自己將會繼續查找相關資料,希望可以早日找到相關說明;如誰了解該問題,還請給出相關介紹或鏈接。
ps: lucene的原理部分就到這里結束了,下篇博客就開始介紹一些案例中可能會用到的API。
- 前言
- 寫在開始之前
- lucene初始認知
- 索引數學模型
- 索引文件結構
- 創建索引
- 搜索索引
- 分詞器介紹
- Query查詢
- IndexSearcher中檢索方法
- 更新說明
- 案例初識
- JsonUtil & XmlUtil
- 基ClassUtil & CharsetUtil
- ParseUtil & ParseRequest
- 數據庫連接池
- 實現實時索引基本原理
- 實時索引管理類IndexManager
- 實時索引的檢索
- 實時索引的修改
- 查詢語句創建PackQuery
- 縱橫小說更新列表頁抓取
- 縱橫小說簡介頁采集
- 縱橫小說章節列表采集
- 縱橫小說閱讀頁采集
- 縱橫小說數據庫設計
- 縱橫小說數據庫操作
- 縱橫小說分布式采集