zoukankan      html  css  js  c++  java
  • lucene 实现分页

     1 package com.kite.dispage;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import org.apache.lucene.document.Document;
     7 import org.apache.lucene.index.IndexWriter;
     8 import org.apache.lucene.index.IndexWriter.MaxFieldLength;
     9 import org.apache.lucene.queryParser.MultiFieldQueryParser;
    10 import org.apache.lucene.queryParser.QueryParser;
    11 import org.apache.lucene.search.IndexSearcher;
    12 import org.apache.lucene.search.Query;
    13 import org.apache.lucene.search.ScoreDoc;
    14 import org.apache.lucene.search.TopDocs;
    15 import org.apache.lucene.util.Version;
    16 import org.junit.Test;
    17 
    18 import com.kite.bean.Article;
    19 import com.kite.luncene.utils.DocumentUtils;
    20 import com.kite.luncene.utils.LunceneUtils;
    21 
    22 /**
    23  * 分页
    24  * @author admin
    25  *
    26  */
    27 public class DisPageTest
    28 {
    29     @Test
    30     public void testCreateIndexBeath() throws Exception
    31     {
    32         IndexWriter indexWriter = new IndexWriter(LunceneUtils.directory, LunceneUtils.analyzer, MaxFieldLength.LIMITED);
    33         for(int i = 0; i < 1000; i++)
    34         {
    35             
    36             Article article = new Article();
    37             article.setId(1L + i);
    38             article.setTitle("luncenes是一个好难写的东西");
    39             article.setContent("百度,谷歌是很好的搜索引擎");
    40             //通过工具类转换成document
    41             Document document = DocumentUtils.articleToDocument(article);
    42             indexWriter.addDocument(document);
    43         }
    44         
    45         indexWriter.close();
    46     }
    47     
    48     /**
    49      * 
    50      * @param firstResult
    51      *    当前页的第一行在集合中的位置
    52      * @param maxResult
    53      *    每页显示的最大的行数
    54      * @throws Exception
    55      */
    56     public void testSearchIndexDispage(int firstResult,int maxResult) throws Exception
    57     {
    58         IndexSearcher indexSearcher = new IndexSearcher(LunceneUtils.directory);
    59         QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new String[]{"title","content"}, LunceneUtils.analyzer);
    60         Query query = queryParser.parse("luncenes");
    61         //查询的是起点位置到一页显示多少行
    62         TopDocs topDocs = indexSearcher.search(query,firstResult+maxResult);
    63         //返回
    64         int count = Math.min(topDocs.totalHits, firstResult+maxResult);
    65         ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    66         List<Article> articleList = new ArrayList<Article>();
    67         for(int i=firstResult;i<count;i++){
    68             Document document =  indexSearcher.doc(scoreDocs[i].doc);
    69             Article article = DocumentUtils.documentToArticle(document);
    70             articleList.add(article);
    71         }
    72         
    73         for(Article article:articleList){
    74             System.out.println(article.getId());
    75             System.out.println(article.getTitle());
    76             System.out.println(article.getContent());
    77         }
    78     }
    79     /**
    80      * 分页测试
    81      */
    82     @Test
    83     public void testDisPage() throws Exception
    84     {
    85         this.testSearchIndexDispage(500,100);
    86     }
    87 }
  • 相关阅读:
    高精度除法(到小数点后200位)
    CodeForces-Zuhair and Strings(思维+枚举)
    Codeforces-Salem and Sticks(枚举+思维)
    idata的各个类型
    C51串口的SCON寄存器及工作…
    XCode快捷键
    Objective-C 的 self 和 super 详解 (用简单程序说明问题)
    UITextFieldDelegate委托方法注释
    Objective-C 基础语法log打印那些事儿(一)
    fcntl详细说明
  • 原文地址:https://www.cnblogs.com/kite/p/3648461.html
Copyright © 2011-2022 走看看