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

  • 相关阅读:
    南阳oj 82 迷宫寻宝(一)
    杭电 oj 1016 Prime Ring Problem
    杭电 oj 3350 #define is unsafe
    南阳oj 366 全排列 D的小L
    南阳oj 32 组合数
    部分和问题 南阳oj 1058
    HNUSTOJ 1516:Loky的烦恼
    HDU-1874 畅通工程续
    T-聊天止于呵呵
    P-残缺的棋盘
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4440512.html
Copyright © 2011-2022 走看看