lucene 的檢索算法屬于索引檢索,即用空間來換取時間,對需要檢索的文件、字符流進行全文索引,在檢索的時候對索引進行快速的檢索,得到檢索位置,這個位置記錄檢索詞出現的文件路徑或者某個關鍵詞。
lucene 在存儲它的全文索引結構時,是有層次結構的,這涉及到5個層次:索引(Index);段(Segment);文檔(Document);域(Field);詞(Term),他們的關系如下圖所示:( lucene 索引存儲結構概念圖)
下圖是 Lucene 生成的索引的一個實例,右邊是對這5個層次的描述:
?
?
Lucene 的索引結構中,即保存了正向信息,也保存了反向信息。
所謂正向信息:
- 按層次保存了從索引,一直到詞的包含關系:索引(Index) –> 段(segment) –> 文檔(Document) –> 域(Field) –> 詞(Term)
- 也即此索引包含了那些段,每個段包含了那些文檔,每個文檔包含了那些域,每個域包含了那些詞。
- 既然是層次結構,則每個層次都保存了本層次的信息以及下一層次的元信息,也即屬性信息,比如一本介紹中國地理的書,應該首先介紹中國地理的概況,以及中國包含多少個省,每個省介紹本省的基本概況及包含多少個市,每個市介紹本市的基本概況及包含多少個縣,每個縣具體介紹每個縣的具體情況。
-
如上圖,包含正向信息的文件有:
- segments_N保存了此索引包含多少個段,每個段包含多少篇文檔。
- XXX.fnm保存了此段包含了多少個域,每個域的名稱及索引方式。
- XXX.fdx,XXX.fdt保存了此段包含的所有文檔,每篇文檔包含了多少域,每個域保存了那些信息。
- XXX.tvx,XXX.tvd,XXX.tvf保存了此段包含多少文檔,每篇文檔包含了多少域,每個域包含了多少詞,每個詞的字符串,位置等信息。
所謂反向信息:
- 保存了詞典到倒排表的映射:詞(Term) –> 文檔(Document)
-
如上圖,包含反向信息的文件有:
- XXX.tis,XXX.tii保存了詞典(Term Dictionary),也即此段包含的所有的詞按字典順序的排序。
- XXX.frq保存了倒排表,也即包含每個詞的文檔ID列表。
- XXX.prx保存了倒排表中每個詞在包含此詞的文檔中的位置。
?
段(Segment) 的控制策略
在建立索引的時候對性能影響最大的地方就是在將索引寫入文件的時候, 所以在具體應用的時候就需要對此加以控制:?
Lucene 默認情況是每加入10份文檔(Document)就從內存往index文件寫入并生成一個段(Segment) ,然后每10個段(Segment)就合并成一個段(Segment). 這些控制的變量如下:?
IndexWriter屬性 | 默認值 | 描述 |
MergeFactory | 10 | 控制segment合并的頻率和大小 |
MaxMergeDocs | Int32.MaxValue | 限制每個segment中包含的文檔數 |
MinMergeDocs | 10 | 當內存中的文檔達到多少的時候再寫入segment |
MaxMergeDocs用于控制一個segment文件中最多包含的Document數.比如限制為100的話,即使當前有10個segment也不會合并,因為合并后的segment將包含1000個文檔,超過了限制。
MinMergeDocs用于確定一個當內存中文檔達到多少的時候才寫入文件,該項對segment的數量和大小不會有什么影響,它僅僅影響內存的使用,進一步影響寫索引的效率。
?
參考資料:
第三節
Lucene
索引文件格式分析
http://hi.baidu.com/hustwk/blog/item/133bd2333f867047ad4b5fd0.html
Lucene
學習總結之三:
Lucene
的索引文件格式(1)
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html
Lucene
學習總結之三:
Lucene
的索引文件格式(2)
http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623599.html
Lucene
入門與使用
http://blog.csdn.net/mxz391/archive/2007/05/15/1610140.aspx
Lucene
源代碼剖析-4 索引文件結構(1)
http://www.cnblogs.com/eaglet/archive/2009/02/13/1390033.html
開放源代碼的全文檢索引擎
Lucene
http://www.
lucene
.com.cn/about.htm
Lucene
:基于Java的全文檢索引擎簡介
http://www.chedong.com/tech/
lucene
.html
Lucene
應用架構分析
http://book.51cto.com/art/200807/80198.htm
淺談
Lucene
架構——開源搜索架構(二)?
http://swanmsg.blog.sohu.com/112470914.html
lucene
.net的索引的建立(三): 建立索引的問題
http://tech.ddvip.com/2008-10/122337481074843.html
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
