lucene使用教程3 常用類的物件

2021-06-08 10:18:04 字數 3351 閱讀 9626

你需要以下類來執行這個簡單的索引與搜尋的過程:

1、indexwriter

2、indexsearcher

3、indexreader

4、directory

5、analyzer

6、document

7、field

8、term

9、query

10、termquery

11、hits

接下來是對這些類的乙個簡短的瀏覽,針對它們在lucene的角色,給出你粗略的概念。接下來我們開始介紹這些類。

indexwriter類

indexwriter是在索引過程中的中心元件。這個類建立乙個新的索引並且新增文件到乙個已有的索引中。你可以把indexwriter想象成讓你可以對索引進行寫操作的物件,但是不能讓你讀取或搜尋。此處使用執行緒同步的方式確保物件的使用高效、安全和減少記憶體的壓力。

以下**是從網路上貼上過來的,**可能會有錯誤,但是原理都是一樣的,明白原理,什麼都簡單

myindexwriter中對indexwriter的建立和**:

public class myindexwriter 

/***

* @function 建立indexwriter物件

* @param indexfilepath 建立索引的路徑

* @param create 建立方式

* @return

*/public static indexwriter getinstance(string indexfilepath, boolean create)

dir = fsdirectory.open(indexfile);

if (indexwriter.islocked(dir))

if (lockfile.exists())

if (create) else else

}indexwriter.setmergefactor(1000);

indexwriter.setmaxfieldlength(integer.max_value);

// 控制寫入乙個新的segment前在記憶體中儲存的最大的document數目

indexwriter.setrambuffersizemb(32);

indexwriter.setmaxmergedocs(200);

} catch (corruptindexexception e) catch (lockobtainfailedexception e) catch (ioexception e) finally

}if (!threadlist.contains(thread.currentthread()))

threadlist.add(thread.currentthread());

return indexwriter;

} }/**

* * @function 關閉indexwriter物件

*/public static void close()

if (dir != null)

} catch (corruptindexexception e) catch (ioexception e)

}} }

}

使用indexwriter新增索引

實現過程:把普通物件轉換成indexwriter需要的documents文件物件,indexwriter是adddocument()方法把物件索引到檔案。

/**

* * @function 建立文件索引

* @param list 索引物件集合

*/private static void createdocindex(listlist,

string indexfilepath, boolean createmode)

} catch (exception e) finally

}

使用indexwriter刪除索引

刪除文件是需要保證的是資料的唯一性,一般把不分詞的域作為判斷的依據,如果乙個域還不能完全保證資料的唯一性,那就需要多個域的組合判斷。

下文教你使用組合域刪除唯一物件,這是lucene教程裡面沒有涉及到的內容,目前使用正常,如果你在使用過程中遇到問題請查閱booleanquery

的使用方式。

/**

* * @function 刪除

* @param id

* 資源id

*/public static void deletedocument(long id, string classname) catch (exception e) finally

} /**

* * @function 刪除文件

* @param bquery

* @param indexfilepath

* @throws exception

*/private static void deletedocument(booleanquery bquery, string indexfilepath) catch (exception e) finally

}

使用indexwriter更新索引

更新索引是乙個刪除再新增的過程,掌握新增和刪除的技巧後,直接運用於更新即可。

使用indexwriter更新索引

合併多個索引檔案

在建立索引的過程中,經常會使用不同的情況建立多個不同的索引檔案,搜尋的時候有時會搜尋整個內容,這就需要使用合併索引的技術,雖然你可以建立索引的時候生成乙個包含全部內容的索引檔案,但是顯然這是不合理的方法,這樣會浪費大量的記憶體,在內容較多的情況下極易記憶體溢位。使用這種合併多個索引的方式使你的程式更加靈活可控。

合併索引檔案的關鍵方法:addindexesnooptimize  但是現在deprecated.useaddindexes(directory...)instead

/**

* * @function 合併索引檔案

* @param fromfilepaths 需要合併的索引檔案路徑

* @param tofilepath 合併完成的索引檔案路徑

*/private static void mergeindex(string fromfilepaths, string tofilepath)

}} catch (exception e) finally

file = null;

} catch (exception e)

} }

lucene使用教程2 索引技術

我們需要對文件進行預處理,建立一種便於檢索的資料結構,以此來提高資訊檢索的速度,這種資料結構就是索引。目前廣泛使用的一種索引方式是倒排序索引。倒排序索引的原理就如同查字典。要先查目錄,得到資料對應的頁碼,在直接翻到指定的頁碼。不是在文章中找詞,而是從目錄中找詞所在的文章。這需要在索引庫中生成乙個詞彙...

lucene3 x核心類介紹

b 索引核心類 b o b directory b 描述lucene索引存放的位置,是乙個抽象類,由子類負責指定索引存在位置 記憶體或者磁碟 b indexwrite b r 負責建立或者開啟新索引,以及對索引做增刪改操作 b analyzer b 文字檔案在被索引前需要經過它進行分析,把它的物件在...

Lucene的Query類介紹

把lucene的查詢當成sql的查詢,也許會籠統的明白些query的真相了。查詢分為大致兩類,1 精準查詢。2,模糊查詢。建立測試資料。private directory directory private indexreader reader private string ids private ...