1. 程式人生 > >lucene6.6+拼音分詞+ik分詞實現

lucene6.6+拼音分詞+ik分詞實現

原來專案使用的是solr進行建立索引與查詢,最近想改為lucene。對於最新版的lucene網上的資料沒有solr多,並且solr很多功能直接配置就可以使用,但是lucene都要通過api進行封裝使用。下面是自己使用lucene6.6+拼音分詞和ik中文分詞實現的功能: 主要工具包:
lucene6.6相關jar包
pinyinAnalyzer.jar
ik-analyzer-solr6.x.jar
pinyin4j-2.5.0.jar

IKAnalyzer.cfg.xml
mydict.dic
stopword.dic
lucene的jar包可以通過maven直接構建下載,其他三個包下載地址。其中ik的分詞包是修改過重新打包已適用於6.0以上的solr和lucene版本。在solr中的拼音分詞器是在managed-schema檔案中配置的:
<!-- 中文與拼音分詞-->
	<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0">    
		<analyzer type="index">    
			<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>    
			<filter class="utn.index.mmseg.solr.PinyinTokenFilterFactory"  minTermLength="2" pinyinAll="true"  outChinese="true"/>   
		</analyzer>    
		<analyzer type="query">         
			<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" userSmart="true"/>    
			<filter class="utn.index.mmseg.solr.PinyinTokenFilterFactory"  minTermLength="2" pinyinAll="true"  outChinese="true"/>  
		</analyzer>    
	</fieldType>  

在lucene中有自帶的中文分詞器但是效果一般,使用ik可以自定義自己的分詞包dic,分詞包直接決定了分詞效果的好壞。 自定義一個分詞類IndexPinyinAnalyzer繼承Analyzer,也可以直接使用pinyinAnalyzer.jar中的PinyinAnalyzer類進行分詞,但是他裡面使用的mmseg4j中文分詞,所以我在這自定義一個analyzer去將他的中文分詞替換為ik分詞,這部分看一下原始碼不難理解。
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.wltea.analyzer.lucene.IKTokenizer;
import utn.index.mmseg.analysis.PinyinTokenFilter;

/**
 * @author sggq
 * @Date 2017年9月22日
 * @Description 自定義分詞Analyzer:ik中文分詞+拼音分詞
 */
public class IndexPinyinAnalyzer extends Analyzer {
	private boolean userSmart;
	public IndexPinyinAnalyzer(boolean userSmart){
		this.userSmart = userSmart;
	}
	@Override
	protected TokenStreamComponents createComponents(String fieldName) {
		 Tokenizer tokenizer = new IKTokenizer(userSmart);
	     TokenStream tokenStream = new PinyinTokenFilter(tokenizer, true, true, 2);
	     return new Analyzer.TokenStreamComponents(tokenizer, tokenStream);
	}
}
ik分詞原始碼中通過IKAnalyzer.cfg.xml配置來載入自定義的分詞包dic,IKAnalyzer.cfg.xml與mydict.dic和stopword.dic放在專案的src/main/resources下,就可以直接載入。建立好自己的分詞類,在lucene建立索引時就可以直接使用這個analyzer,同時在查詢索引時也可以使用這個analyzer。分詞的效果如下:
載入擴充套件詞典:mydict.dic
載入擴充套件停止詞典:stopword.dic
中華人民共和國
zhonghuarenmingongheguo
zhonghuarenmingonghaiguo
zhrmghg
zhonghuarenmingonghuguo
zhonghuarenmingonghuoguo
中華人民
zhrm
zhonghuarenmin
中華
zhonghua
zh
華人
huaren
hr
人民共和國
renmingonghaiguo
renmingonghuoguo
renmingonghuguo
rmghg
renmingongheguo
共和國
gongheguo
ghg
gonghuoguo
gonghaiguo
gonghuguo
共和
gh
gonghai
gonghuo
gonghe
gonghu
國