private static string IndexPath = "E:\\LuceneIndex";
public static void SimpleDemo()
{
//指定索引資料儲存目錄
var fsDir = FSDirectory.Open(IndexPath);
//建立IndexWriter
using (var idxWriter = new IndexWriter(
fsDir, //儲存目錄
new PanGuAnalyzer(), //使用盤古分詞器
true, //清除原有索引,重新建立
IndexWriter.MaxFieldLength.UNLIMITED //不限定欄位內容長度
))
{
//示範為兩份文件建立索引
var doc = new Document();
//每份文件有兩個Field: Source、Word
doc.Add(new Field("Source", "阿甘正傳", Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Word", "人生就像一盒巧克力,你永遠也不會知道你將拿到什麼。",
Field.Store.YES, Field.Index.ANALYZED));
idxWriter.AddDocument(doc);
doc = new Document();
doc.Add(new Field("Source", "Spider Man", Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("Word", "Remember, with great power, comes great responsibility.",
Field.Store.YES,
Field.Index.ANALYZED));
idxWriter.AddDocument(doc);
//建立索引
idxWriter.Commit();
idxWriter.Optimize();
}
//查詢示範
//若不需刪除文件或修改Norms,第二個參數傳入true採唯讀方式效能較好
var searcher = new IndexSearcher(fsDir, true);
//指定欄位名傳入參數
QueryParser qp = new QueryParser(Version.LUCENE_30, "Word", new PanGuAnalyzer());
Query q = qp.Parse("巧克力");
var hits = searcher.Search(q, 10); //查詢前10筆
Debug.WriteLine($"找到{hits.TotalHits}筆");
foreach (var doc in hits.ScoreDocs)
{
Debug.WriteLine($"{searcher.Doc(doc.Doc).Get("Word")}");
}
}