2007-7-4
建立索引
前面已經建立了document和field,那麼如何儲存建立好的索引呢?這是通過indexwriter實現的。
indexwriter在建立的時候需要指定索引檔案所在目錄引數、分析器引數(用來在進行索引的時候對文字進行分析,用來進行將索引字段進行切詞的操作)、是否重新建立索引操作(如果為true,則清空重建,false則是增加在其基礎上增加索引)
同時向乙個目錄下進行索引寫操作時,只能由乙個indexwriter進行操作,如果多個indexwriter會造成同步問題。
注意這裡說的是同乙個
indexwriter
,也就是說多個執行緒操作揖個
indexwriter
的寫入方法是可以的嘍??
接下來講的例子給出了建立索引的過程。最重要的是不要忘了在結束的時候呼叫close()函式,只有呼叫了此函式之後,才會將存放於記憶體中的資料儲存到硬碟上。
看列出的indexwriter源**,在adddocument()方法中使用了synchronized防止了多執行緒同時訪問的問題。
效能的調整:
在將索引資料寫入磁碟的時候,可以通過三個引數對效能進行優化:
在進行之前需要說的乙個概念就是segment,他是索引檔案中最大的乙個單位。它是有多個document(或者segment)合併起來的。具體格式後面會講到
1 mergefactor
:這個引數設定了寫入磁碟時記憶體中最大的
document
數量,用來設定多少個
document
物件可以被預先快取在記憶體中,然後將它們一起寫入磁碟,預設值為
10個;
舉例說明:假設設定為
10,每當10個
document
被新增入索引後,將建立乙個段(segment《長度為10>
);每當湊齊了長度為10的
10個段時,則會建立整合成一新的段(長度為
100),依此類推
所以,較高的
mergefactor
值會占用較多的記憶體,但會在寫入時減少對磁碟的訪問。通常會加速建立索引的過程,較高的
mergefactor
會導致查詢速度變慢,因為查詢時會從乙個較大的索引檔案中讀取。 2
maxmergedocs
:定義了乙個段中最大的
document
數量,以防止單個
segment
無限擴充下去。
較高的maxmergedocs
適合於批量索引,適合於新建立索引。建立索引的速度快,但占用的記憶體比較多;較小的值適合於增量式增加索引。 3
minmergedocs
:控制了儲存到乙個段前,被快取的
document
的數量,這將影響到段在磁碟上的大小,此引數也會改善索引的速度,但是過大會導致記憶體溢位
這塊有點暈,好像兩本書講的不大一樣,也可能是俺英文差,沒看懂。好像這三引數只是用來在建立索引的時候用。但是這幾個引數設定了之後建立出的索引檔案是一樣的嗎?檢索效率一樣嗎?這裡需要重看看以後,估計有問題。
LUCENE 讀書筆記 20070712
20070712 檢索 建立了索引就是為了檢索用的,下面就開始看嘍。檢索的步驟 1 建立indexsearcher 初始化indexsearcher的方法有很多種,最簡單的就是傳遞乙個索引檔案所在目錄的字串作為引數。2 構建query query代表了查詢的條件以及查詢的一些引數 3 返回查詢結果並...
LUCENE讀書筆記 20070702
2007 7 2 突然想學lucene了,不知為什麼,就是想學了,為了防止半途而廢,決定寫讀書筆記,大家監督。初學者寫的,切記不可當教程看,不准的。本不想發在blog,但實在沒時間整別的了,還是發了吧 lucene 是什麼?lucence 是一種全文檢索工具,它按照一定的規則去建立檔案索引,然後再按...
Lucene讀書筆記(三)
lucene索引文件格式 以上就是lucene的索引檔案的概念結構。lucene索引index由若干段 segment 組成,每一段由若干的文件 document 組成,每乙個文件由若干的域 field 組成,每乙個域由若干的項 term 組成。項是最小的索引概念單位,它直接代表了乙個字串以及其在檔...