首页 > Web开发 > 详细

Lucene 4.7 --实现搜索

时间:2015-04-20 01:45:25      阅读:304      评论:0      收藏:0      [点我收藏+]

先看一段代码

IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(FSDirectory.open(new File("F:\\indexDir"))));
QueryParser parser = new QueryParser(Version.LUCENE_47, "", analyzer);
        String queryStr = getQueryStr(paramVO);
        query = parser.parse(queryStr);
        int maxCount = 20;
        TopDocs topDocs = searcher.search(query, maxCount);

说明:

0. IndexSearcher的创建方法好像也在新版本做了一些区别

1. anaylzer的定义是这样的:analyzer = new SmartChineseAnalyzer(Version.LUCENE_47); 

2. getQueryStr自定方法的作用是根据VO对象创建Lucene的query语句,而关于query语句的语法,可以参考这里:官方文档对query表达式的解析(主要是与或非的逻辑关系)

3. maxCount最大获取的匹配文档数,比如100个总文档,你的query表达式匹配了50个,但是你传的maxCount为5,那就是选最优的前5个

 

然后就是拿到TopDocs后对放数据分析出来,或者说,还原打包成一个VO对象,下面是一段示例

ScoreDoc[] pageDocs = topDocs.scoreDocs;
for (int i = 0; i < pageDocs.length; i++) {
     CarVO item = getDocsItem(query,pageDocs[i]);
     voList.add(item);
}


private CarVO getDocsItem(Query query, ScoreDoc scoreDoc) throws IOException {

  Set<String> fields = new HashSet<String>();
  fields.add("carId");
  fields.add("carName");

  org.apache.lucene.document.Document document = searcher.doc(scoreDoc.doc, fields);
  CarVO resultVO = new CarVO();
  resultVO.setCarIddocument.getValues("carId")[0]);
    resultVO.setCarName(document.getValues("carName")[0]);
  return resultVO;
}

这里field加入进去的就是你之前创建索引时候的Field对象的name属性

 

Lucene 4.7 --实现搜索

原文:http://www.cnblogs.com/hwaggLee/p/4440512.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!