`
jkbjxy
  • 浏览: 83848 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Lucene中使用分页

阅读更多

Lucene3.5中提供了一个分页方法:searchAfter方法,可以方便的分页,不过仍然需要把大量数据取出。

/**
	 * 分页搜索
	 * 把所有数据都取出来才行
	 * 可以把每次需要分页的内容取出来,没有必要一次性取出所有的东西
	 * 比如:每页存放10个内容,需要第一页就取出10个内容,需要第二页就去取出20个内容
	 * @return 
	 * @throws IOException 
	 * @throws IOException 
	 */
public static ScoreDoc getLastScoreDoc(int pageIndex, int pageSize, Query query,
        IndexSearcher searcher) throws IOException
{
	if(pageIndex==1)
		return null;
	//取出上一页的数量
	int num = pageSize*(pageIndex-1);
	TopDocs tds = searcher.search(query, num);
	//根据页码和分页大小返回最后一个scoreDoc
	return tds.scoreDocs[num-1];
}
public static void searchByPage(String indexDir, int pageIndex, int pageSize, 
        String query, String fieldname) throws IOException
{
	//打开存放索引的目录
	Directory dir = FSDirectory.open(new File(indexDir));
	IndexReader reader = IndexReader.open(dir);
	IndexSearcher is = new IndexSearcher(reader);
	QueryParser parser = new QueryParser(Version.LUCENE_35, fieldname, 
              new StandardAnalyzer(Version.LUCENE_35));
	try {
		Query q = parser.parse(query);
                //得到上一页的最后一个记录
		ScoreDoc lastsd = getLastScoreDoc(pageIndex, pageSize, q, is);
		TopDocs tds = is.searchAfter(lastsd, q, 1);
		for(ScoreDoc s1:tds.scoreDocs)
		{
			Document doc = is.doc(s1.doc);
			System.out.println(s1.doc+doc.get("filename"));
		}
	} catch (ParseException e) {
		e.printStackTrace();
	}
	is.close();
}

 在主函数中运行:

String indexDir = args[0];
//查询部分,比如在内容中查询,在目录中查询
String s = args[1];
//要查询字符串
String query = args[2];
//分别为第一页第二页第三页,会重叠
searchByPage(indexDir, 1, 1, query, s);
searchByPage(indexDir, 2, 1, query, s);
searchByPage(indexDir, 3, 1, query, s);

 输入参数:

D:\abc\Lucene\index03 contents Lucene
 
分享到:
评论
2 楼 jkbjxy 2013-05-20  
cl1154781231 写道
请问,当数据量比较大的时候TopDocs tds = searcher.search(query, num);  是不是会内存溢出呢?有没有什么办法可以防止这种情况的出现?

我也不太清楚,最近没有看lucene了。
1 楼 cl1154781231 2013-05-13  
请问,当数据量比较大的时候TopDocs tds = searcher.search(query, num);  是不是会内存溢出呢?有没有什么办法可以防止这种情况的出现?

相关推荐

    lucene查询结果集分页代码

    在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...

    Lucene5学习之分页查询

    在Lucene中,我们可以使用`IndexSearcher`类配合`TopDocs`和`ScoreDoc`来实现分页。 1. **Lucene的搜索过程** Lucene的搜索过程主要包括分析、索引构建和查询执行三个阶段。在查询执行阶段,我们通过`...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene查询工具类和IndexSearcher分页查询示例

    在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...

    自己写的lucene分页高亮显示代码

    本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...

    lucene的排序过滤和分页.zip

    本资料主要探讨了Lucene中的排序、过滤和分页技术,这些都是构建高效、实用的信息检索系统的重要组成部分。 **排序(Sorting)** 排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果...

    Lucene.net建立索引,检索分页Demo

    在 Lucene.net 中,首先需要创建一个 IndexWriter 对象,然后使用 AddDocument 方法添加文档。每个文档由字段(Field)组成,字段可以设置不同的属性,如是否存储原始内容、是否可被搜索等。索引创建完成后,使用 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene第一步---6.分页

    本篇文章将带你迈出使用Lucene的第一步,重点关注如何实现分页检索,这对于构建高效、用户友好的搜索系统至关重要。 Lucene的核心功能包括文档索引、查询解析和结果排序。在分页检索方面,我们需要考虑如何有效地...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    - 在SSH框架中,可以使用拦截器或者在Action中实现分页逻辑,结合Struts2的result标签展示分页链接。 4. 排序: - Lucene支持多种排序策略,如按照评分评分(Score排序),按照文档ID排序,或者根据自定义字段排序...

    使用Lucene4.7实现搜索功能,分页+高亮

    标题中的“使用Lucene4.7实现搜索功能,分页+高亮”表明我们要讨论的是如何利用Apache Lucene 4.7版本来构建一个具备搜索、分页和高亮显示功能的系统。Lucene是一个高性能、全文本搜索引擎库,它提供了强大的文本...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene详细使用教程

    如果你使用的是 Maven,可以在 pom.xml 文件中添加对应的 Lucene 依赖。对于其他构建工具,如 Gradle 或 Ivy,也有相应的配置方式。确保选择与项目所用 Java 版本相匹配的 Lucene 版本。 **创建索引** 1. **文档...

    对内存中Lucene查询的集合进行分页

    在Lucene中,可以使用`TopDocs`对象来获取查询的排名和分数,然后结合分页参数进行处理。`TopDocs`包含了`totalHits`(总命中数)和`scoreDocs`(得分文档数组)两个关键信息,可以据此计算出总页数和当前页对应的...

    lucene实例(包括分页、中文检索等)

    lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...

Global site tag (gtag.js) - Google Analytics