lucene索引的更新和刪除

2021-06-08 10:53:31 字數 2588 閱讀 4321

索引的刪除: 

indexreader和indexwriter都由刪除索引的功能,但這兩者是有區別的, 

使用indexreader刪除索引時,索引會馬上被刪除,其有兩種方法,可以刪除索引deletedocument(int docnum)和deletedocument(term term)前者會刪除編號為docnum的document,後者會刪除帶有term的document。但是用這個類刪除有侷限性,當用此類開啟的索引後來修改後會報stalereaderexception異常,並且當其他writer已經開啟此索引時也會報異常。 

indexwriter可以根據多種情況進行刪除deleteall()刪除所有的document、deletedocuments(query… queries)刪除多個查詢出來的document,deletedocuments(query query)刪除query查詢出來的document等等,但用indexwriter執行刪除的話一定要進行關閉,否則刪除不會立馬生效。

directory directory = fsdirectory.open(new file("d:\\lucene"));  

indexwriterconfig config = new indexwriterconfig(version.lucene_34, new standardanalyzer(version.lucene_34));  

//最大快取文件數,控制寫入乙個新的segment前記憶體中儲存的document的數目

config.setmaxbuffereddocs(100);  

//控制乙個segment中可以儲存的最大document數目,值較大有利於追加索引的速度,預設integer.max_value,無需修改。

config.setmaxbuffereddocs(integer.max_value);  

indexwriter indexwriter = new indexwriter(directory, config);  

indexwriter.deletedocuments(new term("id",index));  

//這兩句一定要執行

indexwriter.optimize();  

indexwriter.close();  

索引的更新: 

indexwriter可以更新索引。 

更新索引實際上是把要更新的document刪除,然後把修改過的document加入到索引中,其方法是document(term term,document doc),第乙個引數是刪除含有term的document,第二個引數是更新後的document。 

directory directory = fsdirectory.open(new file("d:\\lucene"));  

indexwriterconfig config = new indexwriterconfig(version.lucene_34, new standardanalyzer(version.lucene_34));  

//最大快取文件數,控制寫入乙個新的segment前記憶體中儲存的document的數目

config.setmaxbuffereddocs(100);  

//控制乙個segment中可以儲存的最大document數目,值較大有利於追加索引的速度,預設integer.max_value,無需修改。

config.setmaxbuffereddocs(integer.max_value);  

indexwriter indexwriter = new indexwriter(directory, config);  

document doc = new document();  

//設定field的name是為了搜尋時更精確,比如只想在title中搜尋。

field idfield = new field("id", blog2.getid() + "", field.store.yes, field.index.not_analyzed);  

field titlefield = new field("title", blog2.gettitle(), field.store.yes, field.index.analyzed);  

field contentfield = new field("content", blog2.getcontent(), field.store.no, field.index.analyzed);  

field datefield = new field("date", blog2.getdate(), field.store.yes, field.index.no);  

doc.add(titlefield);  

doc.add(contentfield);  

doc.add(idfield);  

doc.add(datefield);  

indexwriter.updatedocument(new term("id", blog2.getid() + ""), doc);  

//這兩句一定要執行,不然的話,更新不會馬上執行。

indexwriter.optimize();  

indexwriter.close();  

原文:

lucene索引的更新和刪除

索引的刪除 indexreader和indexwriter都由刪除索引的功能,但這兩者是有區別的,使用indexreader刪除索引時,索引會馬上被刪除,其有兩種方法,可以刪除索引deletedocument int docnum 和deletedocument term term 前者會刪除編號為...

sql更新和刪除

update 語句 update 語句用於修改表中的資料。語法 update 表名稱 set 列名稱 新值 where 列名稱 某值 person lastname firstname address city gates bill xuanwumen 10 beijing wilson champ...

MySQL更新和刪除

更新和刪除的操作sql語句比較簡單,不過要注意使用update的時候,要注意weher條件的限制,下面的語句是只更新id為10005的email位址,如果不加where語句限制,那麼將表中所有的email更新為 elmer fudd.com 刪除某個列的值,設定為null即可。刪除行的sql語句,使...