paip.lucene 4.3 中文语义搜索最佳实践

paip.lucene 4.3 中文语义搜索最佳实践




首先一个问题是要不要使用lucene 自带的分词器...我觉得最好不使用哪自带的分词器.效果还凑火,就是不好控制...


先使用ik,ict,mmsj等分词器进行分词..


然后使用WhitespaceAnalyzer 建立索引...再使用它进行搜索...注意,建立索引以及搜索使用的Analyzer要一样才行..


要是使用StandardAnalyzer,不个单字也分割开兰,后期过滤麻烦...




作者Attilax  艾龙,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.csdn.net/attilax




-----------------建立索引
try {
//索引文件的保存位置
Directory dir = FSDirectory.open(new File(Constants.INDEX_STORE_PATH));
//分析器
 
 

 Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_40); 
 

//配置类
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_40,analyzer);
iwc.setOpenMode(OpenMode.CREATE);//创建模式 OpenMode.CREATE_OR_APPEND 添加模式

writer = new IndexWriter(dir, iwc);
} catch (Exception e) {
e.printStackTrace();
}


------------搜索
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
QueryParser parser = new QueryParser(Version.LUCENE_40, field,analyzer);
// 将关键字包装成Query对象
query = parser.parse(keyword);
Date start = new Date();
// 1 根据关键字只取索引库中的前100条document,然后把这100条document按某种方式进行排序,安得分从高到低返回结果。 
TopDocs results = searcher.search(query, 5 * 2);
Date end = new Date();
System.out.println("检索完成,用时" + (end.getTime() - start.getTime())
+ "毫秒");
return results;
} catch (Exception e) {
e.printStackTrace();
return null;
}

posted on 2013-11-14 20:29  新一  阅读(246)  评论(0编辑  收藏  举报

导航