中文分词配置好后,需要对源代码进行一些修改,否则在爬虫和搜索时候不能正确分词。中文分词器回头一起补充上。我的nutch版本1.0。(修改打包,放到lib包中,记得将跟目录上的nutch.job删掉。)
爬虫 :org.apache.nutch.indexer.lucene.LuceneWriter 需要对write方法进行一些修改,以中文分词为主。nutch默认加载en分词器。
public void write(NutchDocument doc) throws IOException {
final Document luceneDoc = createLuceneDoc(doc);
String lang = null;
if(luceneDoc.get("lang") == null) {
lang = "zh";
}
// final NutchAnalyzer analyzer = analyzerFactory.get(luceneDoc.get("lang"));
final NutchAnalyzer analyzer = analyzerFactory.get(lang);
if (Indexer.LOG.isDebugEnabled()) {
Indexer.LOG.debug("Indexing [" + luceneDoc.get("url")
+ "] with analyzer " + analyzer + " (" + luceneDoc.get("lang")
+ ")");
}
writer.addDocument(luceneDoc, analyzer);
}
搜索 :下面是之前做的记录,粘贴出来也许能给需要的朋友带来些帮助。(修改后打包放到web的lib目录里)
(1) 找到:org.apache.nutch.analysis.NutchAnalysis
(2) 添加一个方法:
/**
* 20090705 biaowen 实现:
* 不知道为什么nutch提供的默认parser对中文分词无效。
* 所以自己加上这方法,使用lucene来代替,可做为原来方法的替代。
* @param conf
* @return
* @throws ParseException
*/
final public Query parseByLucene(Configuration conf) throws ParseException {
Query query = new Query(conf);
if (queryString.length() > 0) {
// lucene分词
org.apache.lucene.queryParser.QueryParser parserLucene =
new org.apache.lucene.queryParser.QueryParser("", analyzer);
org.apache.lucene.search.Query q = null;
try {
q = parserLucene.parse(queryString);
} catch (org.apache.lucene.queryParser.ParseException e) {
LOG.info("字符窜解析异常:"+e.getMessage());
}
String termStrings = q.toString();
if (termStrings.indexOf(" ") > -1)
termStrings = termStrings.substring(1, termStrings.length()-1);
String[] terms = termStrings.split(" ");
for (int i = 0; i < terms.length; i++) {
String[] tems = {terms[i]};
query.addRequiredPhrase(tems, Clause.DEFAULT_FIELD);
}
}
return query;
}
(3) 将NutchAnalysis.parseQuery方法中的 :return parser.parse(conf); 修改为--》return parser.parseByLucene(conf);