方法一:
private List processHits(Hits hits,int startIndex,int endIndex)throws Exception{
if(endIndex>=hits.length())
endIndex=hits.length()-1;
List docs=new ArrayList();
for(int i=startIndex;i<=endIndex;i++){
Document doc=hits.doc(i);
Map docMap=new HashMap();
docMap.put("id",doc.getField("id").stringValue());
docMap.put("name",doc.getField("name").stringValue());
docMap.put("price",doc.getField("price").stringValue());
docs.add(docMap);
}
return docs;
}
方法二:
做一个搜索引擎就要像个样子,做的专业一些才好,因此在分页处理时也采用类似百度和google的分页方式。
对于结果集的处理,大家各有办法,总结起来就是缓存和重新查询两种方式,lucene推荐第二种,如果使用缓存的方式感觉控制资源的释放比较困难,在并发性较多的情况下系统可能资源耗尽,因此我们这里采用lucene推荐的做法实现类似百度和google的分页效果。
终于调试通过了,大家可以直接使用了,哪里不清楚可以给我留言。
<%@ page contentType="text/html; charset=gb2312" buffer="none"%>
<%@ page import="java.util.*"%>
<%
//初始化全局变量
int totalNum = 0; //总共记录条数
int numPerPage = 0; //每页显示记录条数
int maxPageNum = 0; //本次搜索最大页数
int curPage = 1; //当前页
int startLocation = 0; //起始位置
Vector searchresult = (Vector) session.getAttribute("searchresult");
numPerPage = ((Integer)session.getAttribute("setPageNum")).intValue();
totalNum = searchresult.size();
maxPageNum=((totalNum%numPerPage) == 0)?totalNum/numPerPage:(totalNum/numPerPage+1);
curPage=startLocation/numPerPage + 1;
%>
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<title>查询结果页面</title>
<STYLE>
BODY { MARGIN: 6px 0px 0px; COLOR: #000; BACKGROUND-COLOR: #fff; FONT-FAMILY: arial }
TABLE { BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px }
TD { FONT-SIZE: 11pt; LINE-HEIGHT: 18px; FONT-FAMILY: arial; text-align:center}
.p { PADDING-LEFT: 18px; FONT-SIZE: 14px; WORD-SPACING: 4px }
#ft { CLEAR: both; BACKGROUND: #e6e6e6; LINE-HEIGHT: 20px; TEXT-ALIGN: center; FONT-SIZE: 12px; COLOR: #77c; FONT-FAMILY: Arial }
</STYLE>
</head>
<%
if(request.getParameter("startLocation")!=null)
{
startLocation = Integer.parseInt(request.getParameter("startLocation")); //取当前页码
System.out.println("startLocation ="+startLocation);
curPage = ((startLocation%numPerPage) == 0)?(startLocation/numPerPage):(startLocation/numPerPage+1);
curPage=curPage+1;
System.out.println("curPage ="+curPage);
}
%>
<body>
<form method="POST" >
<table border="0.5" width="100%" >
<tr bgcolor="#72963D">
<td align="center" class="colsTitle" nowrap height="19">
查询结果
</td>
</tr>
<%
if(curPage<maxPageNum){
System.out.println("startLocation="+startLocation);
for(int i=startLocation; i<startLocation+numPerPage; i++){
String result = (String) searchresult.elementAt(i);
out.println("<tr bgcolor=\"#F1F0ED\">");
out.println("<td align=\"center\" nowrap height=\"19\">");
out.println(result);
out.println("</td>");
out.println("</tr>");
}
}else{
System.out.println("totalNum="+totalNum);
for(int i=startLocation; i<totalNum; i++){
String result = (String) searchresult.elementAt(i);
out.println("<tr bgcolor=\"#F1F0ED\">");
out.println("<td align=\"center\" nowrap height=\"19\">");
out.println(result);
out.println("</td>");
out.println("</tr>");
}
}
//searchresult.clear();
%>
<tr><td>
<hr align="center" color="#990066" width="500">
</td>
<tr>
<td>
<%
if (curPage > 1 ) {
out.println("<a href='searchresult.jsp?startLocation="+(startLocation-numPerPage));
out.println("'>上一页</a>");
}
if(maxPageNum > 10) {
int totalNumShow = curPage + 9;
int startLocationPage = 0;
if( totalNumShow > maxPageNum) {
totalNumShow = maxPageNum;
}
if( maxPageNum > 11 && curPage > 11) {
startLocationPage = curPage - 11;
}
for(int i=startLocationPage;i<totalNumShow;i++) {
if(i+1 == curPage) {
%> [<%=i+1%>] <%
} else {
%><a href="searchresult.jsp?startLocation=<%=i*numPerPage%>"> <%=i+1 %> </a><%
}
}
}
else {
for( int i=0;i<maxPageNum;i++) {
if( i+1 == curPage) {
%> [<%=i+1 %>] <%
} else {
%><a href="searchresult.jsp?startLocation=<%=i*numPerPage%>"> <%=i+1 %> </a><%
}
}
}
if ( curPage < maxPageNum) {
out.println("<a href='searchresult.jsp?startLocation="+(startLocation+numPerPage));
out.println("'>下一页</a>");
}
%>
</td>
</tr>
</table>
</form>
</body>
</html>
分享到:
相关推荐
### Lucene in Action 第二版 – Apache Lucene 3.0 深度解析 #### 知识点一:Lucene 简介与应用场景 Lucene 是一个高性能、全功能的文本搜索库,它为开发者提供了构建强大搜索应用的能力。本书《Lucene in Action...
通过分析和学习《Lucene in Action》的配套源代码,开发者不仅可以理解Lucene的基本工作原理,还能掌握实际项目中应用Lucene的技巧,提高搜索引擎的性能和用户体验。这些知识对于构建高效、可扩展的全文搜索系统至关...
通过阅读《Lucene in Action 2nd Edition MEAP》,开发者可以深入理解Lucene的工作原理,掌握其核心功能,并能灵活地将其应用到实际的搜索项目中。书中提供的实例代码和实践指导有助于读者快速上手并提升技能,无论...
- 在SSH框架中,可以使用拦截器或者在Action中实现分页逻辑,结合Struts2的result标签展示分页链接。 4. 排序: - Lucene支持多种排序策略,如按照评分评分(Score排序),按照文档ID排序,或者根据自定义字段排序...
3. 在线教程:网络上有许多优秀的Lucene教程,如《Lucene in Action》一书的在线版本,以及各种博客文章和视频教程。 四、性能测试与优化 在描述中提到,对100W、500W、1000W三个级别的数据量进行了测试。这涉及到...
3. 书籍:《Lucene in Action》是一本经典的Lucene入门书籍,深入浅出地讲解了Lucene的各个方面。 通过这个PPT教程,你将全面了解Lucene的原理、使用方法以及如何在实际项目中集成和优化搜索引擎。每个章节都会结合...
《Hibernate Search in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...
- **书籍与教程**:如《Lucene in Action》和《Lucene 实战》,提供深入的理论和实践指导。 总之,Lucene.Net 2.4.0 是一款强大的全文检索库,为 .NET 开发者提供了构建高效搜索引擎的工具。尽管版本相对较老,但其...
随着熟练度的提升,可以阅读更深入的书籍,如《Lucene in Action》等,了解其内部机制和高级特性。 总结来说,Lucene是一个强大的全文检索工具,通过掌握其基本概念和操作,开发者可以构建高效、灵活的搜索功能,为...
由于提供的文件信息不完整且存在OCR扫描错误,我将尽力根据现有的信息提炼出可能的知识点,并结合Solr的通用知识点...由于OCR技术的限制,部分文字可能存在误差,但整体上能够反映出Solr in Action这本书的丰富内容。
### Elasticsearch in Action 知识点概述 #### 一、引言 《Elasticsearch in Action》是一本深入探讨Elasticsearch技术的书籍,由Radu Gheorghe、Matthew Lee Hinman和Roy Russo共同撰写。本书全面介绍了Elastic...
Compass是一个基于Lucene的全文搜索引擎库,它简化了在Java应用中集成全文检索的功能。本教程将重点讲解如何使用SSH框架与Compass结合,实现在网站内的搜索分页功能。 首先,让我们深入了解SSH框架的每个组件: 1....
《Java例题源码第二章-solr-in-action》是一个包含本书示例代码、数据和配置的资源包,主要用于帮助读者深入理解Java编程中的Solr搜索引擎应用。Solr是Apache Lucene项目的一个子项目,是一个高性能、全文本搜索...
开发者只需配置Action类,定义分页参数,然后在Service层根据这些参数执行相应的SQL查询,最后由Hibernate处理数据库交互,返回分页后的数据给前端展示。 除此之外,系统可能还包括其他功能,如图书搜索、分类浏览...
在论坛系统中,每个主要功能如发帖、回帖等都会对应一个或多个Action,这些配置有助于管理和控制应用程序的行为。 **3. JSP与Servlet** 在视图层,Struts使用JSP(JavaServer Pages)作为表现层技术,通过JSP标签库...
在实际项目中,可能还需要考虑性能优化,例如使用缓存减少数据库访问,或者对搜索结果进行分页和排序。此外,对于大型项目,可能需要考虑分布式搜索和多索引管理。 总结来说,这个项目涉及了Web应用开发的关键技术...