做一个搜索引擎就要像个样子,做的专业一些才好,因此在分页处理时也采用类似百度和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>
相关推荐
5. 分页功能是搜索结果展示的重要部分,可以通过调整Query的参数或自定义Scorer来实现。例如,通过设置topN参数限制返回结果的数量,实现每页展示一定数量的搜索结果。 6. 最后,新增的根据分类索引功能可能涉及到...
“lucene_web”项目是Lucene与Web服务器的结合,它通过Servlet或者Spring MVC等Web开发框架来接收用户请求,处理搜索查询,并返回相应的搜索结果。项目的结构通常包含以下几个关键部分: 1. **索引构建**:在项目...
5. **分页搜索**:由于Lucene的查询特性,需要实现分页查询策略,通常先获取前100条结果,然后根据需要逐页加载更多结果。 6. **排序**:默认情况下,Lucene根据文档得分进行排序。得分计算涉及词频(tf)、倒排...
3. **结果集处理**:在Lucene.Net.DemoLib.dll中,你可以看到如何获取搜索结果,如何进行相关性评分,以及如何对结果进行排序和分页。 4. **高亮显示**:示例库还涵盖了如何使用高亮器(Highlighter)突出显示查询...
4. **结果集处理**:讨论如何对搜索结果进行排序、分页和高亮显示,以及如何使用faceting(分面搜索)进行分类和过滤。 5. **高级话题**:涵盖复杂的数据结构如DocValues和Stored Fields,以及倒排索引的压缩技术。...
8. **查询和结果处理(Query and Result Handling)**:Solr 提供了丰富的查询语法(如 Lucene 查询语法和 DisMax 请求处理器),并支持对搜索结果进行排序、高亮显示、分页等操作。 9. **Faceting(分类浏览)**:...
例如,你可以通过 `fq` 过滤出特定时间段内的数据,使用 `sort` 对结果进行排序,通过 `rows` 和 `start` 进行分页,以及利用 `defType` 配合不同的查询解析器来优化查询效率。掌握这些基本知识,将有助于你更高效地...
在唐诗检索系统中,MyBatis通过XML或注解的方式配置SQL映射文件,实现数据库查询、插入、更新和删除等操作。在进行唐诗检索时,MyBatis会根据传入的参数动态生成SQL,执行查询,并将查询结果转换为Java对象。 搜索...
9. **错误处理和日志记录**:确保在搜索过程中捕获和处理可能出现的异常,同时记录日志以供后期分析和调试。 10. **安全考虑**:防止SQL注入攻击,对用户输入进行验证和清理,避免执行恶意SQL。 Ejear.com多元搜索...
- 输入处理:用户通过搜索框输入关键词,这些数据由Request对象获取。 - 数据库连接:通常,搜索功能会涉及到数据库查询。ASP可以使用ADODB对象来连接和操作数据库,如SQL Server或Access。 - SQL查询:根据用户...
通过阅读源码,了解如何构建 Elasticsearch 的客户端,如何定义索引模板,如何处理索引生命周期管理,以及如何在 SpringBoot 控制器中调用 Repository 进行数据操作。此外,还可以学习如何测试和调试 Elasticsearch ...
Apache Solr是一款强大的开源企业级搜索平台,它基于高性能的Lucene Java搜索库,用于处理全文索引、快速高亮显示搜索结果以及提供多种高级搜索功能。 描述提到,通过阅读和研究这些源码,你可以提升自己的PHP编程...
Elasticsearch是一款基于Lucene的开源全文搜索引擎,具备分布式、RESTful接口、实时性等特点,非常适合处理大量的数据并提供高效的搜索性能。 3. **JPA (Java Persistence API)**:用于操作数据库的ORM(对象关系...
由于GitHub下载速度可能受网络环境影响,不总是稳定快速,因此在获取Elasticsearch-Head时,可以通过其他方式,比如使用Git客户端来下载,以避免下载过程中的困扰。 Elasticsearch 是一个流行的开源全文搜索引擎,...
这可能涉及到全文搜索技术,如Lucene.NET,或者利用数据库存储文件信息,然后通过SQL查询来获取结果。 在源码中,开发者可能会使用ASP.NET的控件,如GridView、DetailsView、FileUpload等,来创建交互式的文件列表...
6. **分页与排序**:对搜索结果进行分页处理,并支持多种排序方式,便于数据浏览。 7. **多语言支持**:Elasticsearch-head界面默认为英文,但可以通过配置支持其他语言,包括中文。 **安装与使用elasticsearch-...
一个由anjularjs+bootstrap+springMVC搭建的免费开源的API接口、文档管理系统(应用接口管理系统) 修改内容: 1.Lucene索引添加项目ID,解决搜索结果调试按钮点击跳转错误的bug 2.添加文章、评论、数据字段、网页的...
查询结果可以自定义排序、分页和高亮显示,提升用户体验。 6. **分布式搜索** SolrCloud模式下,Solr支持分布式搜索。多台Solr服务器通过ZooKeeper协调,形成一个分布式集群。数据分布和查询路由由ZooKeeper自动...
- 结果可通过`getAggregations()`获取。 7. **脚本** - Elasticsearch支持动态脚本,可以在查询和聚合中使用JavaScript或Painless语言执行计算逻辑。 - 脚本可以通过`Script`对象创建,然后在查询或聚合中应用。...