version: lucene_3.5
version: lucene_3.5
了解lucene
的核心,我是從源**對比
lucene
的檔案格式(
file formats
)入手的。最核心的參考資料為《
lucene
原理與源**分析完整版》,儘管其版本為
3.0,但是對於
3.5的版本仍具有非常重要的參考價值。
分析建立硬碟索引的過程:
1、write.lock
檔案的生成及作用
在lucene_test
目錄下生成的第乙個檔案就是
write.lock
檔案。這個檔案在
indexwriter
的構造器中執行
writelock
= directory
.makelock(
write_lock_name
);語句時生成。
這個檔案是個臨時檔案,在索引建立結束後會被刪除。如果我們在lucene_test
的目錄中看到這個檔案,表明此時有
writer
正在修改索引資料(新增或者刪除
document
)。這個鎖檔案保證了在任意時刻,最多只有乙個
writer
在修改索引資料。
如果試圖在同乙個索引目錄下生成多個indexwriter
物件,則會報
alreadysetexception
異常。
2、fdt
檔案和fdx
檔案的生成。
在lucene
中,fdt
與fdx
檔案都是在
fieldswriter
中生成的。對於每個document,
解析其fields
中的內容後(這個解析過程是比較複雜的,包括分詞等操作
,後面詳細討論
),把document
中的field
作為正向資訊
原封不動
地儲存到檔案中
(一般用於內容的展示,不參與打分排序)。
fdt(
fielddata
)檔案儲存
field
資料,fdx(fieldindex)
檔案儲存
field
索引。如果把一本書拆成目錄和正文兩部分,那麼fdt
檔案就是正文,fdx
檔案就是目錄。這樣就使得我們
能夠快捷地
讀取document
中的內容。從這裡也可以猜測,對
fdt檔案的讀
取一定是隨機的,可以定位的
,用到了
randomaccessfile類(順便說一下
randomaccess
3、tis和
tii檔案的生成
<
反向資訊
>
當關閉indexwriter
時,儲存在綏存中的詞資訊就需要
flush
到硬碟上了。在這個過程中,
tis和
tii檔案會被建立。
tis和
tii檔案都是在
terminfoswriter
類的建構函式中生成的。
tis和tii
兩個檔案儲存term
,即詞資訊。與
fdt檔案和
fdx檔案類似,
tis檔案儲存
term
內容,tii
檔案是tis
檔案的索引。
4、frq檔案的生成
<
反向資訊
>
frq檔案儲存倒排表資訊,即每個
term
在哪些文件中出現,並且存
term
在每個文件出現的次數。此檔案在
formatpostingsdocswriter
的建構函式中生成。
5、prx檔案的生成
<
反向資訊
>
prx檔案儲存的是每個
term
在出現文件中的位置資訊。 由
formatpostingspositionswriter
的建構函式生成。需要注意的是,如果所有的
field都需要不儲存詞的位置資訊,則此檔案將不存在。
6、norm檔案的生成
norm檔案儲存所有的標準化因子。該檔案在
normswriter
的flush
函式中生成。對於標準化因子,乍一看不好理解,通俗而不全面的理解就是「文件加權」(也包含長文件的降權)。標準化因子由三部分組成
:document boost
、field boost
、lengthnorm(field)
。關於norm
的通俗解釋可參見:
部落格。
7、fnm檔案的生成
fnm檔案儲存的資訊非常簡單明瞭,就是
field
的名字及
field
的結構資訊。該檔案在
docfieldprocessor
的flush方法中生成。
8、segments_
n檔案的生成
segments_
n檔案是索引目錄中
segments_*
檔案的總稱。此檔案儲存了索引的段資訊,即索引包含了多少段,每個段的段名、段的大小、段包含
document
數目等資訊。該檔案在
segmentinfos
類的write方法中生成。
9、segments.gen檔案的生成
segments.gen檔案在
segmentinfos
類的finishcommit
方法中生成。
segments.gen檔案也儲存了段資訊。其作用在於輔助
index
開啟segments_n
檔案。
以上就是程式執行過程中依次生成的索引檔案,這些檔案共同組成了乙個完整的索引。當然,如果有一些特殊的需求,比如高亮顯示、模糊查詢,那麼需要設定field.
termvector
引數,那樣的話,索引檔案的成員又會增加三個tvd
、tvf
、tvx
。當資料量特別大時,索引又會生成
cfs、
cfe檔案。總之,在
lucene3.5
中,圍繞著索引的總共有
17種檔案。其中,最核心的是
frq檔案,即倒排表。它是整個索引的靈魂之所在。
在建立索引的過程中,詞資訊是由bytepool
、charpool
、intpool
三個快取來進行儲存。當快取滿了,則
flush
到硬碟中。
以上就是我所理解到的lucene
建立索引的過程。
Lucene 建立索引
public class indexer public static string indexdir d luceneindex public static void main string args system.out.println 被索引的文件個數 writer.numdocs catch ...
Lucene索引的建立
lucene索引的建立 1.搜尋引擎之所以檢索速度快其中乙個因素就是對索引的建立。就好像書籍的目錄,可以讓我們迅速定位到內容。這裡引用一張圖說明搜尋過程。從圖中可以很清晰的看到乙個搜尋系統,三個部分 收集資料整理成索引文件,這個過程多是確定你需要檢索的資訊。比如如果你需要檢索圖書館中的書。那麼你可能...
Lucene之建立索引
lucene用來建搜尋引擎要解決四個問題 抓取資料 解析資料 建立索引和執行搜尋。首先為每一篇文章新增標題 內容 寫作時間等資訊,從而寫好每一篇文章,然後將每一篇文章新增到書裡面去。這樣問及就寫好了。建立索引的過程如下 建立索引器indexwriter,這相當於一本書的框架。建立文件物件docmen...