2012-10-05

[C#]Lucene.net–增加索引,清除所有索引


如何增加索引,這問題從我寫這一系列文章以來已經被問很多次了~哈哈~
其實看過一些文件..在Lucene. 中,其實都是重做index ..

但是你確保,你的資料是新的,也就是你的定義的Id 欄位不會重複




增加索引值

在初始化 IndexWriter 的時候 ..





參數create 設定成為false..

IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), false, IndexWriter.MaxFieldLength.UNLIMITED);

請注意,一旦你將create 參數設成false 您之後做的index 就會累加上去,所以你可以資料會搜尋出來重複的資料..

完整 C# Code :

Stopwatch sw = new Stopwatch();


  
sw.Start();


  
//Index 存放路徑

string indexPath = AppDomain.CurrentDomain.BaseDirectory + "\\Index1\\";

FSDirectory dir = FSDirectory.Open(new DirectoryInfo(indexPath));

//IndexWriter

IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), false, IndexWriter.MaxFieldLength.UNLIMITED);

// 還原且加入需做 index 的欄位


  
    Document doc = new Document();

    // 把每一個欄位都建立索引

    Field f_Id = new Field("Id", "添加資料Id", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);

    Field f_Age = new Field("Age", "添加資料Age", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);

    Field f_Memo = new Field("Memo", "添加資料Memo", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);

    Field f_BirthDay = new Field("BirthDay", "添加資料Birthday", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.NO);

    doc.Add(f_Id); doc.Add(f_Age); doc.Add(f_Memo); doc.Add(f_BirthDay);

    indexWriter.AddDocument(doc);


  
indexWriter.Optimize();

indexWriter.Commit();

indexWriter.Close();

sw.Stop();

這樣就可以將的資料加入索引..

當然你也可以透過這篇文章(Lucene.net - 透過 IndexReader 刪除索引中的指定資料)提到的
將某筆索引資料刪掉,之後再新增進去..

不過對於大規模的修改,建議您還是重新製作索引…

刪除所有索引


非常的簡單只要呼叫 DeleteAll() 即可..

C# Code :

事實上,當您重做索引的時候,他就已經會刪除上次索引..

單然您有特殊需求,您可以透過 IndexWriter.DeleteAll 進行刪除..

string indexPath = AppDomain.CurrentDomain.BaseDirectory + "\\Index1\\";

FSDirectory dir = FSDirectory.Open(new DirectoryInfo(indexPath));

//IndexWriter

IndexWriter indexWriter = new IndexWriter(dir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), false, IndexWriter.MaxFieldLength.UNLIMITED);


  
indexWriter.DeleteAll();


  
indexWriter.Optimize();

indexWriter.Commit();

indexWriter.Close();

大致筆記到這邊,相信這幾天對於製作索引跟一些技巧都已經大概都說過了…