Lucene索引的建立

2021-07-11 12:19:13 字數 1689 閱讀 5773

lucene索引的建立

1.      搜尋引擎之所以檢索速度快其中乙個因素就是對索引的建立。就好像書籍的目錄,可以讓我們迅速定位到內容。這裡引用一張圖說明搜尋過程。

從圖中可以很清晰的看到乙個搜尋系統,三個部分:收集資料整理成索引文件,這個過程多是確定你需要檢索的資訊。比如如果你需要檢索圖書館中的書。那麼你可能需要把所有檢索書時可能用到的資訊整理出來包括書名,作者,出版日期,摘要等;建立索引。對收集的索引資訊存入資料庫後我們需要在其上建立索引;搜尋服務。搜尋其實就是檢索建立好索引庫。大型的公司伺服器每天還都會自動更新索引,以保證使用者檢索資訊的實時性。這裡我們僅談論索引的建立過程。

2,索引建立

document bookdoc=new document();

field bookname=new field("bookname","鋼鐵是怎樣煉成的",field.store.yes,field.index.tokenized);

field author=new field("author","匿名",field.store.yes,field.index.un_tokenized);

bookdoc.add(bookname);

bookdoc.add(author);

indexwriter writer=new indexwriter(index_store_path,new standaranalyzer(),true);

writer.adddocument(bookdoc);

writer.close();

上面就是乙個索引地建立過程。比如我們要檢索一本書的資訊。首先我們將獲取的需要檢索的書名、作者資訊存入field型別物件中,然後將field物件加入到document型別中。indexwriter是乙個建立索引的工具,利用它對索引建立。indexwriter中封裝了許多類和方法。當我們將document型別的資料給它時,就是告訴它,對bookdoc建立索引。 

對於document和field的關係就好像一張**中的記錄和字段。document只是**中的一行,而field只是一列。

3.引數解釋

filed:前兩個引數很容易理解,給字段起個名字,傳入值。第三個是表示該欄位表示完整儲存下來。通常如果在檢索時需要完整顯示出來資訊就選yes。如果該字段僅是書中一段摘要,我們也可以用field.store.no.可以看的出store為field中的靜態類。而yes為store型別的值。同理,後面的引數表示該欄位需要被分詞器切分檢索。對於作者名字段通常使用者查詢時需要完整輸入,因此該字段不需要切分。

document :呼叫add()方法,將field加入其中。

indexwriter:第乙個為索引建立完成後存放的路徑,通常需要捕捉異常即try...catch神馬的。第二個引數是指定語言的分詞器例項,上文用的是standaranalyzer。第三個布林型值是表式是否將指定路徑下的內容清空。通常我們第一次建立索引時置為true,以後如果只是更新索引應該將其置為false。最後關閉writer.這點需要注意:如果不關閉會導致建立的索引資料沒有匯入磁碟,資料將在快取中,甚至可能出現鎖定情況。下次在該目錄下將會發生無法加入檔案的情況。

這裡給出一篇部落格的鏈結,寫的是lucene4.0,有興趣可以看一下

Lucene 建立索引

public class indexer public static string indexdir d luceneindex public static void main string args system.out.println 被索引的文件個數 writer.numdocs catch ...

Lucene之建立索引

lucene用來建搜尋引擎要解決四個問題 抓取資料 解析資料 建立索引和執行搜尋。首先為每一篇文章新增標題 內容 寫作時間等資訊,從而寫好每一篇文章,然後將每一篇文章新增到書裡面去。這樣問及就寫好了。建立索引的過程如下 建立索引器indexwriter,這相當於一本書的框架。建立文件物件docmen...

如何建立Lucene索引

需要用到的ipa indexwriter 這個是索引建立的中心元件,通過他就可以建立索引,它是生成索引的過程 與讀取和搜尋索引沒有關係 初始化化它時,需要傳遞的兩個引數。第乙個是引數是指定索引建立的位置,第二是引數是配置分詞器。document 這個文字相當於資料庫中的一條記錄,它裡面需要新增fie...