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中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
lucene的排序过滤和分页,lucene开发技术,lucene下载
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
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 + 分页 + 排序 + 高亮 ...
利用Lucene.net做的建立索引,检索分页
一步一步跟我学习lucene是对近期做lucene索引的总结,大家有问题的话联系本人如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家持续关注,会带给大家惊喜的
这个是自己写的lucene分页高亮程序虽然有些不足但是毕竟是自己研究半天总结出来的麻烦各位帮忙给点分哈哈祝大家新年快乐!
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
NULL 博文链接:https://iamyida.iteye.com/blog/2193345
NULL 博文链接:https://llying.iteye.com/blog/581411
盘古分词 lucene3.0.3 使用 示例 可以方便地整合到项目中使用,.net 4.0的。有分页功能。新加根据分类索引功能。
盘古分词 lucene3.0.3 使用 示例 可以方便地整合到项目中使用,.net 4.0的。新加分页功能。
NULL 博文链接:https://huyana-town.iteye.com/blog/2197476
赠送jar包:lucene-spatial3d-6.6.0.jar; 赠送原API文档:lucene-spatial3d-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial3d-6.6.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。