小菜学习Lucene.Net(更新3.0.3版本使用)
生活随笔
收集整理的這篇文章主要介紹了
小菜学习Lucene.Net(更新3.0.3版本使用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
花了兩天的時間研究了下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段代碼
? ? ? 創建索引:
?View Code
? ? 搜索代碼:
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
?View Code使用方法:
?View Code?以上為2.9.2.2 版本
經過幾天的摸索,發現 3.0.3 改變不是很大...于是寫了一份Lucene3.0.3的Helper
代碼:
?View Code使用方式 通上個版本 只是修改 版本的兼容性
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的小菜学习Lucene.Net(更新3.0.3版本使用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动软发布微信营销服务系统,微信商城系统!
- 下一篇: Port Forwarding Por