`
忧里修斯
  • 浏览: 436265 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

阅读更多
1、页面,显示分页工具栏

<jsp:include page="pageTool.jsp">
						<jsp:param name="counts" value="<%=resultList.size() %>"/>
						<jsp:param name="limit" value="<%=limit %>"/>
						<jsp:param name="currentPage" value="<%=currentPage %>"/>
					</jsp:include>

2、分页工具类


package com.trade.commen;

public class Calculator {

	int limit = 10;//默认显示10条
	int pagesNum = 0;//总页数
	int counts = 0;//总记录数
	public Calculator(int limit, int counts) {
		super();
		this.limit = limit;
		this.counts = counts;
		this.pagesNum = getPagesNum();
	}
	
	/**
	 * 获取总页数
	 * @return 总页数
	 */
	public int getPagesNum(){
		if(counts >0 && counts <=limit){
			return 1;
		}else{
			int temp = counts/limit;
			if(counts%limit !=0){
				return temp+1;
			}else{
				return temp;
			}
		}
	}
	
	/**
	 * 获取查询起始位置
	 * @param currentPage
	 */
	public int getStart(int currentPage){
		if(currentPage <= 1){
			return 0;
		}else{
			return (currentPage-1)*limit;
		}
	}
	
	/**
	 * 获取查询结束位置
	 * @param currentPage
	 */
	public int getEnd(int currentPage){
		System.out.println("###########currentPage:"+currentPage);
		System.out.println("###########pagesNum:"+pagesNum);
		if(currentPage == pagesNum){
			int yushu = counts%limit;
			System.out.println("###########yushu:"+yushu);
			
			int end = getStart(currentPage)+yushu;
			System.out.println("###########end:"+end);
			return end;
		}else{
			return getStart(currentPage)+limit;
		}

	}
}


3、pageTool.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.trade.commen.Calculator"%>
<%@page import="java.util.Map.Entry"%>

<%
	//功能**********************对内存中的集合进行分页**********************
	
	int start = 0;//起始位置
	int end = 1;//结束位置
	int limit = 10;//默认显示10条
	int pagesNum = 0;//总页数
	int currentPage = 1;//当前页
	int counts = 0;//总记录数
	String viewUrl = "supply_list.jsp";//显示分页结果的页面
	
	//=================获取参数==================
	if(request.getParameter("counts") != null && !request.getParameter("counts").equals("0")){
		counts = Integer.parseInt(request.getParameter("counts"));
	}
	if(request.getParameter("start") != null && !request.getParameter("start").equals("0")){
		start = Integer.parseInt(request.getParameter("start"));
	}
	if(request.getParameter("limit") != null && !request.getParameter("limit").equals("0")){
		limit = Integer.parseInt(request.getParameter("limit"));
	}
	if(request.getParameter("currentPage") != null && !request.getParameter("currentPage").equals("0")){
		currentPage = Integer.parseInt(request.getParameter("currentPage"));
	}
	if(request.getParameter("viewUrl") != null && !request.getParameter("viewUrl").equals("0")){
		viewUrl = request.getParameter("viewUrl");
	}
	
	Map criteria = (Map)request.getAttribute("criteria");
	String condition = "?";
	if(null != criteria && criteria.size() > 0){
		Iterator it = criteria.entrySet().iterator();
		while(it.hasNext()){
			Entry entry = (Entry)it.next();
			String paraName = entry.getKey().toString();
			String value = entry.getValue().toString();
			condition += paraName+"="+value+"&";
		}
	}
	viewUrl = viewUrl+condition;

	//===============显示分页工具条=================
	Calculator cal = new Calculator(limit,counts);
	pagesNum = cal.getPagesNum();
	if(pagesNum >= 1){
		//总记录
		out.print("Total:"+counts+"&nbsp;&nbsp;");
		//总页数
		out.print("Pages:"+cal.getPagesNum()+"&nbsp;&nbsp;&nbsp;");
		//首页
		out.print("<a href="+viewUrl+"start=0"+"&end="+cal.getEnd(1)+"&currentPage=1"+" >"+"First</a> &nbsp;");
		
		//上一页
		if(currentPage-1 > 0){
			out.print("<a href="+viewUrl+"start="+cal.getStart(currentPage-1)+"&end="+cal.getEnd(currentPage-1)+"&currentPage="+(currentPage-1)+" >"+" Previous </a> &nbsp;");
		}
		if(pagesNum <= 11){//pagesNum<=11
			for(int i=1;i<=pagesNum;i++){
				if(i == currentPage){
					out.print("<b> <a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> </b> &nbsp;");
				}else{
					out.print("<a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> &nbsp;");
				}
			}
		}else{//总页数大于11
			if(currentPage <= 6){
				for(int i=1;i<= 11;i++){//前11个
					if(i == currentPage){
						out.print("<b> <a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> </b> &nbsp;");
					}else{
						out.print("<a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> &nbsp;");
					}
				}
			}else if(currentPage > 6 && currentPage <= pagesNum-5){//当前页大于6小于尾页-5
				for(int i=currentPage-5;i< currentPage;i++){//当前页前5页
					if(i == currentPage){
						out.print("<b> <a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> </b> &nbsp;");
					}else{
						out.print("<a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> &nbsp;");
					}
				}
				for(int i=currentPage;i<=currentPage+5;i++){//当前页后5页
					if(i == currentPage){
						out.print("<b> <a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> </b> &nbsp;");
					}else{
						out.print("<a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> &nbsp;");
					}
				}
			}else if(currentPage > currentPage-5){
				for(int i=cal.getPagesNum()-10;i<=cal.getPagesNum();i++){
					if(i == currentPage){
						out.print("<b> <a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> </b> &nbsp;");
					}else{
						out.print("<a href="+viewUrl+"start="+cal.getStart(i)+"&end="+cal.getEnd(i)+"&currentPage="+i+" >"+i+"</a> &nbsp;");
					}
				}
			}
		}
		
		//下一页
		if(currentPage+1 <= cal.getPagesNum()){
			out.print("<a href="+viewUrl+"start="+cal.getStart(currentPage+1)+"&end="+cal.getEnd(currentPage+1)+"&currentPage="+(currentPage+1)+" >"+" Next </a> &nbsp;");
		}
		
		//尾页
		out.print("<a href="+viewUrl+"start="+cal.getStart(cal.getPagesNum())+"&end="+cal.getEnd(cal.getPagesNum())+"&currentPage="+cal.getPagesNum()+" >Last"+"</a>&nbsp;");
	}
	

%>
分享到:
评论

相关推荐

    Lucene(搜索引擎)开发包

    - **文档**:在 Lucene 中,文档是包含字段的集合,每个字段都有一个名称和值,例如标题、正文、作者等。 - **字段**:字段是文档的组成部分,可以设置不同的索引和存储属性,如全文索引、关键词索引或存储原始...

    lucene.net 2.0.4

    1. 支持多线程:Lucene.NET 2.0.4允许在多线程环境中进行索引和搜索,提高了效率。 2. 增强的性能:通过优化内部数据结构和算法,Lucene.NET 2.0.4在搜索速度和内存使用上都有显著提升。 3. 存储选项:可以选择...

    第一个lucene程序

    这只是一个基础的Lucene应用,实际项目中可能涉及更复杂的查询构造、多字段索引、分页搜索、高亮显示结果等。 总的来说,学习Lucene不仅能提升你的搜索引擎开发能力,也有助于你理解文本处理和信息检索的基本原理。...

    Java搜索工具——Lucene实例总结(一)

    - **文档分析**:Lucene首先对输入的文本进行分析,将其拆分成一个个被称为“术语”(Term)的单元。 - **词典创建**:每个术语都会被存储在一个全局词典中,包含术语的频率、位置等信息。 - **倒排索引**:术语...

    lucene-1.4-final

    5. **内存与磁盘优化**:在Lucene 1.4中,为了提高性能,引入了块级索引的概念,允许一次性加载多个文档,减少了磁盘I/O。同时,缓存机制也得到了改进,可以有效减少重复计算和提高响应速度。 6. **多语言支持**:...

    lucene入门知识

    同时,Lucene的结果输出采用分页方式,仅加载最匹配的前100条,降低了内存需求。 Lucene的索引结构并非传统的B树,而是在扩展索引时生成新的小索引文件,然后定期合并到主索引中,这种设计提升了索引更新的效率。...

    面试指南-Lucene:ES篇.md

    - **避免深度分页**:通过scroll search或search after方法减少单次查询返回的文档数量。 - **注意index type的使用**:正确选择index type可以减少不必要的性能损耗。 - **避免使用稀疏数据**:稀疏数据可能导致...

    基于Lucene的Web站内信息搜索系统

    搜索时,Lucene会将查询与索引中的词项进行匹配,找出包含查询词的文档。然后,根据相关性评分(Scoring)对结果进行排序。相关性评分通常基于TF-IDF(Term Frequency-Inverse Document Frequency)算法,考虑词项在...

    lucene全文索引

    - **Directory**: 存储索引的接口,实现包括内存中的RAMDirectory和硬盘上的FSDirectory。 - **Analyzer**: 处理文本分析的类,可以通过自定义Analyzer实现特定的语言处理规则。 - **Document**: 用于表示一个文档的...

    基于java的文本搜索引擎的设计与实现源码.zip

    这些框架提供了完整的搜索引擎功能,包括索引、查询、排序、分页等,并且支持分布式部署,满足大规模数据的处理需求。 五、性能优化 1. **并行处理**:利用多线程或分布式计算提升索引构建和查询处理的速度。 2. *...

    solr基本总结

    - **技术特点**:Solr 支持通过 HTTP 协议将文档添加到搜索集合中,并允许通过 XML 或 JSON 格式进行查询和获取结果。 - **核心特性**:包括高效的缓存机制、垂直搜索能力、高亮显示搜索结果的功能、索引复制以增强...

    asp.net调用Solr

    最后,为了优化性能,你还可以考虑在ASP.NET中实现缓存策略,例如使用内存缓存或者分布式缓存服务(如Redis),减少对Solr的频繁访问。 总结来说,ASP.NET调用Solr涉及的主要知识点包括:使用SolrNet客户端库、配置...

    Java技术栈有空复习复习

    缺点则可能包括对复杂查询支持不足、需要手动管理对象与数据的映射关系等。面试时可能会问到#{}和${}的区别(#{}预编译,防止SQL注入;${}字符串替换),以及实体类属性与数据库字段映射的处理方式等。 3. **...

    在搜索引擎开发过程中的问题解决(关于高亮和结果集)

    - **并发问题**: 如果多个用户在同一台计算机上打开不同的浏览器窗口或标签页进行搜索,由于session是按每个用户的请求来区分的,所以不同页面的搜索结果会在同一个session中互相覆盖,从而导致数据混乱。...

    solr-5.2.1.tgz

    4. **Cores API 更新**: 对 Core Admin API 进行了改进,提供了更好的管理和监控功能。 5. **CSV Update Handler**: 提供了 CSV 格式的批量更新处理,便于导入大量数据。 6. **Security Enhancements**: 引入了 ...

    自学Elasticsearch.zip

    - **类型与文档**: 类型是一组具有相似结构的文档的集合,文档是存储在 Elasticsearch 中的基本数据单元。 2. **安装与启动** - 下载最新版本的 Elasticsearch 并解压到本地。 - 在命令行中导航到解压目录,运行...

    计算机毕业设计-CRMEB-Java版商城系统-CrmebAdminApplication.zip

    9. **分页与搜索**: 为了提高用户体验,系统可能会使用MyBatis Plus等扩展库实现高效的分页查询,并结合Lucene或Elasticsearch等搜索引擎实现商品的快速检索。 10. **前端技术**: 虽然主要关注Java后端,但前端技术...

Global site tag (gtag.js) - Google Analytics