Luncene高手帮帮忙,搜索后的结果如何分页?
如何能使搜索后返回的Hits对象里只包含指定起始位置和数量的结果,比如:指定从所有满足条件的结果中第10条开始,搜索出10条。如果满足搜索条件的结果是100条,要求返回的Hits对象中只包含10-19这10条结果。
我之前没接触过Luncene,现在工作需要必须用,逼得没办法了,大侠快帮帮我啊!!!
如何能使搜索后返回的Hits对象里只包含指定起始位置和数量的结果,比如:指定从所有满足条件的结果中第10条开始,搜索出10条。如果满足搜索条件的结果是100条,要求返回的Hits对象中只包含10-19这10条结果。
我之前没接触过Luncene,现在工作需要必须用,逼得没办法了,大侠快帮帮我啊!!!
解决方案 »
- 求教HQL问题!~~~~
- struts2.1.8上传下载的问题
- Hibernate 映射了一些接口却无法存储其实现 这问题要怎么解决
- Java中double类型的小数位数控制
- 急:这个问题怎么解决?
- 很奇怪的java问题
- 一段简单到再不能简单的javascript代码,就是调不出来,请问什么问题
- 刚学习hibernate,出现的错误,请大侠们解决哈
- 有关制作图片网站的问题?
- [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported method ResultSet.absolute
- 使用lucene还是nutch?
- struts 2.0.11.2 api 帮助文档 chm格式 下载
然后再写一个分页的类,分页的类处理搜索结果显示的条数。可以设置显示的数目。
------------------------package pig.html;
/**
* 一个分页的类.
* 和search.jsp一起完成分页的功能.
*/
import java.util.List;
import java.util.Vector;public class Pagination {
private int sumPageNumber;
private int sumItemNumber;
private int pageNumber;
private int showItemNumber;
private String visitPageURL;
private String pageHTML; public List interceptListByStarItemNumber(List itemList) {
int startItem = (pageNumber - 1) * showItemNumber;
List tpItemList = new Vector();
if (itemList == null) {
return null;
}
sumItemNumber = itemList.size();
if (sumItemNumber % showItemNumber == 0) {
sumPageNumber = sumItemNumber / showItemNumber;
} else {
sumPageNumber = sumItemNumber / showItemNumber + 1;
} for (int i = 0; i < itemList.size(); i++) {
// 不要超过截取的最大条数,
if ((i) == (startItem + showItemNumber)) {
break;
}
// 当循环到开始条数的时候,将对象添加到新的列表里面。
if (i>=startItem) {
tpItemList.add(itemList.get(i));
}
} return tpItemList;
} public String buildHTML(String tWidth) {
String tableWidth = tWidth;
String visitFirstPageURL = "";
String visitNextPageURL = "";
String visitPreviousURL = "";
String visitEndURL = "";
visitPageURL = visitPageURL + "&showItemNumber=" + showItemNumber
+ "&pageNumber=";
if (pageNumber == 1) {
visitFirstPageURL = "[首页] ";
visitPreviousURL = "[上一页] ";
} else {
visitFirstPageURL = "<a href='" + visitPageURL
+ "1'>[首页]</a> ";
visitPreviousURL = "<A href='" + visitPageURL + (pageNumber - 1)
+ "'>[上一页]</A> ";
}
if (pageNumber == sumPageNumber) {
visitNextPageURL = "[下一页] ";
visitEndURL = "[尾页] ";
} else {
visitNextPageURL = "<a href='" + visitPageURL + (pageNumber + 1)
+ "'>[下一页]</a> ";
visitEndURL = "<a href='" + visitPageURL + sumPageNumber
+ "'>[尾页]</a>";
} StringBuffer sb = new StringBuffer();
sb.append("<table width=" + tableWidth);
sb.append("><tr><td align=right>");
sb.append("当前是第[" + pageNumber + "]页 ");
sb.append("共[" + sumPageNumber + "]页 " + "共[" + sumItemNumber
+ "]条 ");
sb.append(visitFirstPageURL);
sb.append(visitPreviousURL);
sb.append(visitNextPageURL);
sb.append(visitEndURL);
sb.append("</td> </tr></table>");
return sb.toString();
} public int getPageNumber() {
return pageNumber;
} public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
} public int getShowItemNumber() {
return showItemNumber;
} public void setShowItemNumber(int showItemNumber) {
this.showItemNumber = showItemNumber;
} public int getSumItemNumber() {
return sumItemNumber;
} public int getSumPageNumber() {
return sumPageNumber;
} public String getVisitPageURL() {
return visitPageURL;
} public void setVisitPageURL(String visitPageURL) {
this.visitPageURL = visitPageURL;
} public String getPageHTML() {
return pageHTML;
}
}-------------------------
上面的类是小弟在做搜索引擎的时候在网上找到的,
根据自己需要做修改后拿来用了。
在循环时控制,
searcher.search(query, topCollector);
System.out.println("命中:" + topCollector.getTotalHits());
// 查询当页的记录
ScoreDoc[] docs = topCollector.topDocs((pageNO - 1) * pageSize,pageSize).scoreDocs;