说明:

1) 在全文检索系统中,一般查询出来的内容比较多,所以必须将查询出来的内容进行分页处理。

2) 原理同hibernate的分页查询。在hibernate的分页查询中,有两个参数:

int firstResult 当前页的第一行在数据库里的行数

int maxResult 每页显示的页数

3) 返回值不仅包括查询结果,还应该有总记录数,用SearchResult来封装

 

 

 1 @Test
 2     public void testCreateIndexBatch() throws Exception {
 3         IndexWriter indexWriter = new IndexWriter(LuceneUtils.directory,
 4                 LuceneUtils.analyzer, MaxFieldLength.LIMITED);
 5 
 6         for (int i = 0; i < 25; i++) {
 7 
 8             Article article = new Article();
 9             article.setId(1L + i);
10             article.setTitle("lucene可以做搜索引擎");
11             article.setContent("baidu,google都是很好的搜索引擎");
12             indexWriter.addDocument(DocumentUtils.article2Document(article));
13         }
14 
15         indexWriter.close();
16     }
17 
18     /**
19      * 
20      * @param firstResult
21      *            当前页的第一行在集合中的位置
22      * @param maxResult
23      *            每页显示的最大的行数
24      * @throws Exception
25      */
26     public void testSearchIndexDispage(int firstResult, int maxResult)
27             throws Exception {
28 
29         IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.directory);
30 
31         QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30,
32                 new String[] { "title", "content" }, LuceneUtils.analyzer);
33 
34         Query query = parser.parse("lucene");
35         
36         TopDocs topDocs = indexSearcher.search(query, 25);    
37         
38         int count = Math.min(topDocs.totalHits,firstResult+maxResult);
39         
40         ScoreDoc[] scoreDocs = topDocs.scoreDocs;
41         
42          List<Article> articleList = new ArrayList<Article>();
43           for(int i=firstResult;i<count;i++){
44            Document document =  indexSearcher.doc(scoreDocs[i].doc);
45            Article article = DocumentUtils.document2Article(document);
46            articleList.add(article);
47           }
48          
49           for(Article article:articleList){
50            System.out.println(article.getId());
51            System.out.println(article.getTitle());
52            System.out.println(article.getContent());
53           }
54     }
55     
56      @Test
57      public void testDispage() throws Exception{
58       this.testSearchIndexDispage(10, 10);
59      }

 

posted on 2016-10-24 13:06  Sharpest  阅读(238)  评论(0)    收藏  举报