/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.cms.lucene; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.net.URL; import jeasy.analysis.MMAnalyzer; import org.apache.log4j.Logger; import org.apache.lucene.analysis.Analyzer; import com.jinhe.tss.core.util.URLUtil; /** * 全文检索分词器MMAnalyzer创建工厂类。 */ public class AnalyzerFactory { private static final String DICTIONARY_FILE = "dictionary.txt"; private static Logger log = Logger.getLogger(AnalyzerFactory.class); private AnalyzerFactory(){ } private static Analyzer analyzer; /** * 创建一个分词解析对象。 * @return */ public static Analyzer createAnalyzer(){ if(analyzer == null){ // 此处采用MMAnalyzer,分词粒度为2(分词粒度:当字数等于或超过该参数,且能成词,该词就被切分出来 ) analyzer = new MMAnalyzer(2); try { URL dictionaryPath = URLUtil.getResourceFileUrl(DICTIONARY_FILE); if(dictionaryPath != null){ File dictionaryFile = new File(dictionaryPath.getPath()); MMAnalyzer.addDictionary(new FileReader(dictionaryFile)); } } catch (Exception e) { log.error("加载字典文件出错", e); } } return analyzer; } /** * 将搜索关键字加入到新字典中 * @param searchStr * @return */ public static Analyzer createAnalyzer(String searchStr){ analyzer = createAnalyzer(); if( !MMAnalyzer.contains(searchStr) ){ MMAnalyzer.addWord(searchStr); // 写到自己建的词典文件里去 try { URL dictionaryPath = URLUtil.getResourceFileUrl(DICTIONARY_FILE); if(dictionaryPath != null){ // FileWriter的第二个参数true表示追加文件到尾部 FileWriter fileWriter = new FileWriter(dictionaryPath.getPath(), true); BufferedWriter bw = new BufferedWriter(fileWriter); bw.write(searchStr); // 追加文件内容 bw.newLine(); bw.close(); } } catch (Exception e) { log.error("写入字典文件出错", e); } } return analyzer; } }