LUCENE 讀書筆記 20070704

2021-08-29 08:36:39 字數 1527 閱讀 7698

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 組成。項是最小的索引概念單位,它直接代表了乙個字串以及其在檔...