zoukankan      html  css  js  c++  java
  • 分页查询

    【数据分页】

           MySql =====〉limit

           Oracle=====〉RowNum

           MsSql=====〉in子查询

    【Lucene】

           3.5前 =====〉再查询

           3.5后=====〉searchAfter()

    【分页】

    1) 分页的参数

         每页记录数

         当前页索引

    2) 再查询

     1     /**
     2      * 通过再搜索的方式进行分页
     3      * @param key                :查询关键字
     4      * @param pageIndex    :当前页索引
     5      * @param pageSize        :每页记录数
     6      */
     7     public void searchAgain(String key, int pageIndex,int pageSize){
     8         IndexReader reader= null;
     9         IndexSearcher searcher = null;
    10         
    11         try{
    12             //获取Reader
    13             reader = util.getReader(getDirectory(path));
    14                 
    15             //获取Searcher
    16             searcher = new IndexSearcher(reader);    
    17             
    18             //获取Query
    19             QueryParser parser = new QueryParser(version,"content",new StandardAnalyzer(version));    
    20             Query query = parser.parse(key);
    21             
    22             //获取TopDocs
    23             TopDocs td =     searcher.search(query, 500);
    24             System.out.println("总结查询到" + td.totalHits + "条数据");
    25             
    26             //获取ScoreDoc
    27             ScoreDoc[] sds = td.scoreDocs;
    28             
    29             //显示条目
    30             //起始索引
    31             int start = (pageIndex -1) * pageSize;
    32             //结束索引
    33             int end = pageSize * pageIndex;
    34             
    35             //从查询结果中进行截取
    36             for(int i = start;i<end;i++){
    37                 Document doc = searcher.doc(sds[i].doc);
    38                 
    39                 System.out.println(i + "、" + doc.get("filename") + " == " + doc.get("size") + " == " + doc.get("modifydate") + "  == " + doc.get("path"));
    40             }
    41         }
    42         catch(Exception e){
    43             e.printStackTrace();
    44         }
    45         finally{
    46             try {
    47                 searcher.close();
    48             } catch (IOException e) {
    49                 // TODO Auto-generated catch block
    50                 e.printStackTrace();
    51             }
    52         }
    53         System.out.println("再查询结束");
    54     }

    3) searchAgain()

    获取上一页的最后一个元素

     1     /**
     2      * 获取上一页的最后一个元素
     3      * @param query
     4      * @param searcher
     5      * @param index
     6      * @param size
     7      * @return
     8      */
     9     public ScoreDoc getLastDoc(Query query, IndexSearcher searcher, int index, int size){
    10         if(index == 1)
    11             return null;
    12         
    13         //当前页的第一个条目的索引(id)
    14         int  total = (index - 1) * size;
    15     
    16         try {
    17             //查询上一页的所有条目
    18             TopDocs td = searcher.search(query, total);
    19             
    20             //返回最后一个元素
    21             return td.scoreDocs[total-1];
    22         } catch (IOException e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25             return null;
    26         }
    27     }

     使用searchAfter()实现搜索

     1     /**
     2      * 使用searchAfter()实现搜索
     3      * @param key
     4      */
     5     public void searchByAfter(String key,int pageIndex,int pageSize){
     6         IndexReader reader= null;
     7         IndexSearcher searcher = null;
     8         
     9         try{
    10             //获取Reader
    11             reader = util.getReader(getDirectory(path));
    12                 
    13             //获取Searcher
    14             searcher = new IndexSearcher(reader);    
    15             
    16             //获取Query
    17             QueryParser parser = new QueryParser(version,"content",new StandardAnalyzer(version));    
    18             Query query = parser.parse(key);
    19             
    20             ScoreDoc after = getLastDoc(query,searcher,pageIndex, pageSize);
    21             TopDocs td = searcher.searchAfter(after, query, pageSize);
    22             ScoreDoc[] sds = td.scoreDocs;
    23             
    24             /*
    25             //获取TopDocs
    26             TopDocs td =     searcher.search(query, 500);
    27             System.out.println("总结查询到" + td.totalHits + "条数据");
    28                         
    29             //获取ScoreDoc
    30             ScoreDoc[] sds = td.scoreDocs;
    31             //查询第1页
    32             //searchAfter(下一页的第一个条目)
    33             //td = searcher.searchAfter(null,query,10);
    34             //查询第2页
    35             td = searcher.searchAfter(sds[10],query, 10);
    36             
    37             //获取ScoreDoc
    38             sds = td.scoreDocs;
    39             */
    40             //从查询结果中进行截取
    41             int i = 1;
    42             for(ScoreDoc sd : sds){
    43                 Document doc = searcher.doc(sd.doc);
    44                 
    45                 System.out.println(i + "、" + doc.get("filename") + " == " + doc.get("size") + " == " + doc.get("modifydate") + "  == " + doc.get("path"));
    46                 i++;
    47             }
    48         }
    49         catch(Exception e){
    50             e.printStackTrace();
    51         }
    52         finally{
    53             try {
    54                 searcher.close();
    55             } catch (IOException e) {
    56                 // TODO Auto-generated catch block
    57                 e.printStackTrace();
    58             }
    59         }
    60         System.out.println("再查询结束");
    61     }
    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    HTTP 状态码
    Buffer 流文件
    事件(Event)机制 .on() .emit() .once() .removeListener()
    UDP node客户端和服务端
    node全局变量  node定时器 系统自带的模块 http服务器
    标题省略,不会自动换行
    SpringBoot 出现 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
    循环对象
    npm
    根据对象的key值,查找对应的属性value
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9832130.html
Copyright © 2011-2022 走看看