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
分享到:
相关推荐
在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
在Lucene中,我们可以使用`IndexSearcher`类配合`TopDocs`和`ScoreDoc`来实现分页。 1. **Lucene的搜索过程** Lucene的搜索过程主要包括分析、索引构建和查询执行三个阶段。在查询执行阶段,我们通过`...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...
本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...
本资料主要探讨了Lucene中的排序、过滤和分页技术,这些都是构建高效、实用的信息检索系统的重要组成部分。 **排序(Sorting)** 排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果...
在 Lucene.net 中,首先需要创建一个 IndexWriter 对象,然后使用 AddDocument 方法添加文档。每个文档由字段(Field)组成,字段可以设置不同的属性,如是否存储原始内容、是否可被搜索等。索引创建完成后,使用 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
本篇文章将带你迈出使用Lucene的第一步,重点关注如何实现分页检索,这对于构建高效、用户友好的搜索系统至关重要。 Lucene的核心功能包括文档索引、查询解析和结果排序。在分页检索方面,我们需要考虑如何有效地...
- 在SSH框架中,可以使用拦截器或者在Action中实现分页逻辑,结合Struts2的result标签展示分页链接。 4. 排序: - Lucene支持多种排序策略,如按照评分评分(Score排序),按照文档ID排序,或者根据自定义字段排序...
标题中的“使用Lucene4.7实现搜索功能,分页+高亮”表明我们要讨论的是如何利用Apache Lucene 4.7版本来构建一个具备搜索、分页和高亮显示功能的系统。Lucene是一个高性能、全文本搜索引擎库,它提供了强大的文本...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
如果你使用的是 Maven,可以在 pom.xml 文件中添加对应的 Lucene 依赖。对于其他构建工具,如 Gradle 或 Ivy,也有相应的配置方式。确保选择与项目所用 Java 版本相匹配的 Lucene 版本。 **创建索引** 1. **文档...
在Lucene中,可以使用`TopDocs`对象来获取查询的排名和分数,然后结合分页参数进行处理。`TopDocs`包含了`totalHits`(总命中数)和`scoreDocs`(得分文档数组)两个关键信息,可以据此计算出总页数和当前页对应的...
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...