2012-10-05

[C#] Lucene.net - 透過 IndexReader 刪除索引中的指定資料…

 

使用 Lucene 建立索引後基本上,更新他做的動作都是刪除後,全部重做..

但是如果是要刪除某筆資料是可以做到的,這樣可以避免重新再製作一次 index ..

如何建立索引資料可以參考此篇 http://www.dotblogs.com.tw/junegoat/archive/2012/08/03/c-sharp-lucene-create-index.aspx

畢竟當資料一大,製作 index 是很花時間的…

原本製作 index 後我搜尋資料…

 

sshot-33_2

這時候我不想要將所有資料=重新做一次 index .. 但是我必須把索引中的 Id: 9 刪除這時候..

我們可以透過 IndexReder 讀取後 進行刪除該筆在 index 中的資料…

C# Code:

Stopwatch sw = new Stopwatch();
// 啟動計時器
sw.Start();
string indexPath = AppDomain.CurrentDomain.BaseDirectory.ToString() + "\\Index1\\";
DirectoryInfo dirInfo = new DirectoryInfo(indexPath);
FSDirectory dir = FSDirectory.Open(dirInfo);
// 讀取 index file
IndexReader reader = IndexReader.Open(dir, false);
// 透過 Term 敘述當 Id 是 9 的資料透過 IndexReader 去刪除
reader.DeleteDocuments(new Term("Id", "9"));
reader.Close();
sw.Stop();
Response.Write("刪除指定索引花費時間: " + sw.Elapsed + "");

 


這樣我們來看一下結果..


sshot-35_2


這樣該筆 9 資料就從 index 中被刪除了..


Source: