你需要以下類來執行這個簡單的索引與搜尋的過程:
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 ...