下面是中文分词搜索的代码:
(测试代码,稍作改动可以正式使用。以下代码都是在lucene3.x中,最新版本3.4可能有改动。不过思路不变)
public void searchIKIndexByString(String index){
//存放索引目录
File indexDir = new File("D:\\luceneIndex");
FSDirectory directory;
try {
//用索引目录构建directory对象
directory = FSDirectory.open(indexDir);
//构造索引搜索器
IndexSearcher searcher = new IndexSearcher(directory);
if(!indexDir.exists()){
System.out.println("The Lucene index is not exist");
return;
}
//设置相似度比较器
searcher.setSimilarity(new IKSimilarity());
// String keyword = "中文分词工具包";
//使用IKQueryParser查询分析器构造Query对象
//多条件查询语句构建
String[] fields={"GoodsName"};
String[] querys={index};
Occur[] Occurs={BooleanClause.Occur.MUST};
Query query = IKQueryParser.parseMultiField(fields, querys, Occurs);
//排序字段(先后顺序即排序优先级,越排前面,优先级越高)
// SortField sortF = new SortField("sellTotal", SortField.INT,true);
// Sort sf = new Sort(sortF);
Sort sort = new Sort(new SortField[]{new SortField("sellTotal",SortField.INT,true),new SortField("time",SortField.STRING,true),new SortField("price",SortField.FLOAT,true)});
//定义搜索的基本单位。第一个参数代表了要在文档的哪一个 Field 上进行查找,第二个参数代表了要查询的关键词。
// Term term = new Term(fieldName,keyword);
// //构造查询对象。构造函数只接受一个 Term 对象
//对像数据库中%like%查询的测试 //获取Document 对象
// Query query = new FuzzyQuery(term);
//搜索相似度最高的5条记录
TopDocs topDocs = searcher.search(query, null, 1000,sort);
System.out.println("命中:" + topDocs.totalHits);
for(int i=0;i
ScoreDoc scoreDoc=topDocs.scoreDocs[i];
Document document=searcher.doc(scoreDoc.doc);
System.out.println("document: "+document.get("GoodsName")+"id: "+document.get("id")+"IsNew: "+document.get("IsNew")+"销量:"+document.get("sellTotal")+" 商品入库时间 :"+document.get("time"));
System.out.println("商品价格: "+document.get("price"));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}