標籤:false cep .com 外掛程式 director com 索引 lang 內容
1.前言
前一陣把部落格換了個模版,模版提供了一個搜尋按鈕,這讓我想起一直以來都想折騰的全文檢索搜尋技術,於是就用lucene6.2.1加上HanLP的分詞外掛程式做了這麼一個模組CSearch。
效果看這裡:https://chulung.com/search
源碼:CSearch
2.關於分詞
索引的一個核心功能便是分詞,lucene內建的分詞是基於英語的,所以中文分詞用其他外掛程式比較好。
網上很多都是推薦IK-Analyzer,不過這個外掛程式很久沒更新了,用lucene6的話重構才能用:IK-Analyzer-6,這個是我重構的版本。
但在查閱分詞的方面的資料的時候無意中發現了HanLP(Han Language Processing),這個漢語言處理包比較新,提供了lucene的分詞外掛程式,資料什麼的也更詳細,所以我就更換過來了。
3.代碼中的一些坑
在敲代碼時還是遇到了一些比較坑的問題,由於網上基本沒有lucene6的中文教程,老的lucene3,4那時的教程很多相容不上了。
- 即時查詢的DirectoryReader擷取
使用IndexWriter新增索引後存在搜尋不到的問題,這是因為在getReader時要使用openIfChanged方法,才能保證做到更新後即時查詢。
private DirectoryReader getReader() throws Exception { if (reader==null){ this.reader=DirectoryReader.open(fsDirectory); } //有更新則重新開啟,讀入新增加的增量索引內容,滿足即時查詢需求 DirectoryReader newReader = DirectoryReader.openIfChanged((DirectoryReader)reader, getIndexWriter(), false); if (newReader != null) { reader.close(); reader = newReader; } return reader;}
- 高亮外掛程式結果錯位問題
文檔中的\r\n字元會導致高亮結果錯1位,比如高亮”外掛程式”會變成高”亮插”件,因此需要replace空白字元。
String context = doc.get(CONTEXT).replaceAll("\\s*", "");String highContext = highlighter.getBestFragment(analyzer, CONTEXT, context);
chulung
原文連結:https://chulung.com/article/53
本文由MetaCLBlog於2016-11-21 01:00:04自動同步至cnblogs
false
lucene6+HanLP中文分詞