下圖是一個典型的Lucene4.x的索引結構圖: web
Lucene4.x以後的全部索引格式以下所示:
性能
文件名 |
後綴 |
描述 |
Segments File |
segments.gen, segments_N |
存儲段文件的提交點信息 |
Lock File |
write.lock |
文件鎖,保證任什麼時候刻只有一個線程能夠寫入索引 |
Segment Info |
.si |
存儲每一個段文件的元數據信息 |
Compound File |
.cfs, .cfe |
複合索引的文件,在系統上虛擬的一個文件,用於頻繁的文件句柄 |
Fields |
.fnm |
存儲域文件的信息 |
Field Index |
.fdx |
存儲域數據的指針 |
Field Data |
.fdt |
存儲全部文檔的字段信息 |
Term Dictionary |
.tim |
term字典,存儲term信息 |
Term Index |
.tip |
term字典的索引文件 |
Frequencies |
.frq |
詞頻文件,包含文檔列表以及每個term和其詞頻 |
Positions |
.prx |
位置信息,存儲每一個term,在索引中的準確位置 |
Norms |
.nrm.cfs, .nrm.cfe |
存儲文檔和域的編碼長度以及加權因子 |
Per-Document Values |
.dv.cfs, .dv.cfe |
編碼除外的額外的打分因素, |
Term Vector Index |
.tvx |
term向量索引,存儲term在文檔中的偏移距離 |
Term Vector Documents |
.tvd |
包含每一個文檔向量的信息 |
Term Vector Fields |
.tvf |
存儲filed級別的向量信息 |
Deleted Documents |
.del |
存儲索引刪除文件的信息 |
複合索引文件是指,除了段信息文件,鎖文件,以及刪除的文件外,其餘的一系列索引文件壓縮一個後綴名爲cfs的文件,意思,就是全部的索引文件會被存儲成一個單例的Directory,而非複合索引是靈活的,能夠單獨的訪問某幾個索引文件,而複合索引文件則不能夠,由於其壓縮成了一個文件,因此在某些場景下可以獲取更高的效率,好比說,查詢頻繁,而不常常更新的需求,就很適合這種索引格式。
lucene索引的基本概念組成由,索引,文檔,域和項組成,一個索引,一般包含一些序列的文檔,一個文檔包含一些序列的域,而一些域又包含一些序列的項,而一些項則包含一些列序列的最低層的字節,注意這裏的序列指的是在索引結構中有序,一般有序的這種方式,某些狀況能夠優化索引結構。lucene使用了倒排索引(Inverted Indexing),來存儲索引信息,大大提升了檢索效率,倒排索引,舉一個通俗的例子,原來基於人們的正常思惟,咱們會存儲的是一個文章中出現了那幾個單詞,而倒排索引,卻偏偏相反,它存儲的是這個單詞,包含在幾個文檔中,固然這個關係是由倒排鏈表(存儲一系列docid)構成的索引,咱們在檢索時,經過這個單詞能夠快速的定位,它出如今幾篇文章中,從而大大提高了檢索性能。固然lucene中不單單有倒排索引,也有正向的存儲,而倒排之因此是lucene的核心,是由於它提高了檢索性能,在檢索到一個個具體的文檔時,就須要咱們正向的拿出這些信息,反映在實際的代碼中就是咱們經過檢索獲取一個個docid,而後經過一個個docid獲取整個文檔,而後咱們在正向的獲取各個域,以及各個項存儲的具體信息,固然前提是你存儲了這個字段,若是你只是索引了,而並無存儲,那麼你只能檢索到此條信息,但沒法獲取具體term的值,這個須要在建索引以前就要設計好,索引的存儲結構,那些字段是檢索的,那些字段是存儲的等等,若是你還須要高亮一些內容,則還須要存儲這個域的偏移的位置,經過這樣就能準確的在文中標記檢索命中的關鍵詞,若是你打算在前臺來完成這個高亮,就不要存儲這些信息了。