花了兩天的時間研究了下Lucene.Net 發現確實挺好玩.... 最新版本是3.0.3 (最后更新時間2012-10)
可惜3.0.3版本的Lucene.net無法和盤古分詞 (最新版為2.3.1.0 最后更新時間 2010-10)一起使用.....因為盤古分詞 基於2.9.x.x版本 寫的 ,在 3.0.3中很多 接口 和 類名 發生了 變化..(當然 網上 也有解決方案 :基於新的接口 重新 編譯 盤古分詞)
今天主要用的是 Lucene.Net 2.9.2.2 與盤古分詞 2.3.0.0版本.
主要功能就是 創建索引,和搜索 下面貼出 2段代碼
創建索引:

搜索代碼:

string indexPath = @"C:\lucenedir";//最好將該項放在配置文件中。 string kw = Request["txtContent"]; kw = kw.ToLower(); FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory()); IndexReader reader = IndexReader.Open(directory, true); IndexSearcher searcher = new IndexSearcher(reader); //搜索條件 //PhraseQuery query = new PhraseQuery(); BooleanQuery queryMsg = new BooleanQuery();//或者條件 TermQuery query = null; foreach (string word in Common.WebCommon.SplitWord(kw))//將用戶輸入的搜索內容進行了盤古分詞、 { query = new TermQuery(new Term("msg", word)); //query.Add(new Term("msg", word)); queryMsg.Add(query, BooleanClause.Occur.SHOULD); } //query.SetSlop(100);//多個查詢條件的詞之間的最大距離.在文章中相隔太遠 也就無意義.(例如 “大學生”這個查詢條件和"簡歷"這個查詢條件之間如果間隔的詞太多也就沒有意義了。) //TopScoreDocCollector是盛放查詢結果的容器 TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true); searcher.Search(queryMsg, null, collector);//根據query查詢條件進行查詢,查詢結果放入collector容器 ScoreDoc[] docs = collector.TopDocs(0, collector.GetTotalHits()).scoreDocs;//得到所有查詢結果中的文檔,GetTotalHits():表示總條數 TopDocs(300, 20);//表示得到300(從300開始),到320(結束)的文檔內容. //可以用來實現分頁功能 List<SearchResult> list = new List<SearchResult>(); for (int i = 0; i < docs.Length; i++) { // //搜索ScoreDoc[]只能獲得文檔的id,這樣不會把查詢結果的Document一次性加載到內存中。降低了內存壓力,需要獲得文檔的詳細內容的時候通過searcher.Doc來根據文檔id來獲得文檔的詳細內容對象Document. int docId = docs[i].doc;//得到查詢結果文檔的id(Lucene內部分配的id) Document doc = searcher.Doc(docId);//找到文檔id對應的文檔詳細信息 SearchResult result = new SearchResult(); result.Msg =Common.WebCommon.Highlight(kw,doc.Get("msg")); result.Title = doc.Get("title"); result.Url = "/BookDeatail.apsx?id=" + doc.Get("id"); list.Add(result); } this.SearchRepeater.DataSource = list; this.SearchRepeater.DataBind();
大體 思路就是 這樣子 不錯 這兩坨代碼 太難看了 於是 我基於這2段 代碼 封裝下了於是有了 LuceneHelper

使用方法:

以上為2.9.2.2 版本
經過幾天的摸索,發現 3.0.3 改變不是很大...於是寫了一份Lucene3.0.3的Helper
代碼:

使用方式 通上個版本 只是修改 版本的兼容性