zoukankan      html  css  js  c++  java
  • Lucene 4.7 --实现搜索

    先看一段代码

    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属性

  • 相关阅读:
    获取声音设备名称及PNPDeviceID
    定时音乐播放
    获取多媒体详细信息列表
    产品滚动展示
    制作电影特效效果
    十字光标定位
    获取指定点的RGB值
    绘画小游戏
    倒影效果文字
    浮雕效果显示图像
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4440512.html
Copyright © 2011-2022 走看看