ucene3.0 分页显示与高亮显示 实现的 分页 与 高亮显示
lucene3.0 分页显示与高亮显示 实现的 分页 与 高亮显示
出处:http://bjqincy.iteye.com/blog/784817
分页类
- package com.cee.com;
- import java.util.List;
- //分页类
- public class PageBean {
- private List list; // 要返回的某一页的记录列表
- private int allRow; // 总记录数
- private int totalPage; // 总页数
- private int currentPage; // 当前页
- private int pageSize; // 每页记录数
- private int offset;
- public int getOffset() {
- return offset;
- }
- public void setOffset(int offset) {
- this.offset = offset;
- }
- private boolean isFirstPage; // 是否为第一页
- private boolean isLastPage; // 是否为最后一页
- private boolean hasPreviousPage; // 是否有前一页
- private boolean hasNextPage; // 是否有下一页
- public List getList() {
- return list;
- }
- public void setList(List list) {
- this.list = list;
- }
- public int getAllRow() {
- return allRow;
- }
- public void setAllRow(int allRow) {
- this.allRow = allRow;
- }
- public int getTotalPage() {
- int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
- / pageSize + 1;
- return totalPage;
- }
- public void setTotalPage(int totalPage) {
- this.totalPage = totalPage;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public void setCurrentPage(int currentPage) {
- this.currentPage = currentPage;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- /** */
- /**
- * 初始化分页信息
- */
- public void init() {
- this.isFirstPage = isFirstPage();
- this.isLastPage = isLastPage();
- this.hasPreviousPage = isHasPreviousPage();
- this.hasNextPage = isHasNextPage();
- }
- /** */
- /**
- * 以下判断页的信息,只需getter方法(is方法)即可
- *
- * @return
- */
- public boolean isFirstPage() {
- return currentPage == 1; // 如是当前页是第1页
- }
- public boolean isLastPage() {
- return currentPage == totalPage; // 如果当前页是最后一页
- }
- public boolean isHasPreviousPage() {
- return currentPage != 1; // 只要当前页不是第1页
- }
- public boolean isHasNextPage() {
- if(totalPage==0){
- return false;
- }else{
- return currentPage != totalPage; // 只要当前页不是最后1页
- }
- } /** */
- /**
- * 计算总页数,静态方法,供外部直接通过类名调用
- *
- * @param pageSize
- * 每页记录数
- * @param allRow
- * 总记录数
- * @return 总页数
- */
- public static int countTotalPage(final int pageSize, final int allRow) {
- int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
- / pageSize + 1;
- return totalPage;
- }
- /** */
- /**
- * 计算当前页开始记录
- *
- * @param pageSize
- * 每页记录数
- * @param currentPage
- * 当前第几页
- * @return 当前页开始记录号
- */
- public static int countOffset(final int pageSize, final int currentPage) {
- final int offset = pageSize * (currentPage - 1);
- return offset;
- }
- /** */
- /**
- * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
- *
- * @param page
- * 传入的参数(可能为空,即0,则返回1)
- * @return 当前页
- */
- public static int countCurrentPage(int page) {
- final int curPage = (page == 0 ? 1 : page);
- return curPage;
- }
- public static int lastSqlIdx(int rowStartIdx, int pageSize) {
- return rowStartIdx + pageSize;
- }
- }
分页代码与高亮代码
注意 indexDir 目录下存放的是 lucene 的索引, 直接运行代码会发生错误,请看上篇文章生成索引
- package com.cee.test;
- import java.io.File;
- import java.io.IOException;
- import java.io.StringReader;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.TokenStream;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.index.CorruptIndexException;
- import org.apache.lucene.queryParser.MultiFieldQueryParser;
- import org.apache.lucene.queryParser.ParseException;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.search.ScoreDoc;
- import org.apache.lucene.search.Searcher;
- import org.apache.lucene.search.TopScoreDocCollector;
- import org.apache.lucene.search.highlight.Highlighter;
- import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
- import org.apache.lucene.search.highlight.QueryScorer;
- import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
- import org.apache.lucene.store.FSDirectory;
- import org.apache.lucene.util.Version;
- import com.cee.com.PageBean;
- /**
- * 分页与高亮显示
- *
- * @author qcy
- *
- */
- public class PageSearcher {
- /**
- *
- * @param pageNo
- * @param pageSize
- * @param q
- * 表示查询条件
- * @return
- */
- public final static String indexDir = "d:\\TestLucene\\indexDB";
- @SuppressWarnings({ "unchecked", "unchecked", "deprecation", "deprecation" })
- public static PageBean getPageQuery(int pageNo, int pageSize, String[] q)
- throws CorruptIndexException, IOException, ParseException, InvalidTokenOffsetsException {
- List result = new ArrayList();
- Searcher searcher = new IndexSearcher(FSDirectory.open(new File(
- indexDir)), true);
- Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
- String[] fields = { "cbs", "zz" };
- Query query = MultiFieldQueryParser.parse(Version.LUCENE_CURRENT, q,
- fields, analyzer);
- TopScoreDocCollector topCollector = TopScoreDocCollector.create(
- searcher.maxDoc(), false);
- searcher.search(query, topCollector);
- // 高亮设置
- SimpleHTMLFormatter simpleHtmlFormatter = new SimpleHTMLFormatter(
- "<B>", "</B>");//
- Highlighter highlighter = new Highlighter(simpleHtmlFormatter,
- new QueryScorer(query));
- // 查询当页的记录
- ScoreDoc[] docs = topCollector.topDocs((pageNo - 1) * pageSize,
- pageSize).scoreDocs;
- for (ScoreDoc scdoc : docs) {
- Document document = searcher.doc(scdoc.doc);
- TokenStream tokenStream = analyzer.tokenStream("text",
- new StringReader(document.get("cbs")));
- String str = highlighter.getBestFragment(tokenStream, document.get("cbs"));
- result.add("id=" + document.get("id") + "|cbs="
- + document.get("cbs") + "|zz=" + document.get("zz")+"|red"+str);
- }
- PageBean pb = new PageBean();
- pb.setCurrentPage(pageNo);// 当前页
- pb.setPageSize(pageSize);
- pb.setAllRow(topCollector.getTotalHits());// hit中的记录数目
- pb.setList(result);
- return pb;
- }
- public static void main(String[] args) throws CorruptIndexException,
- IOException, ParseException, InvalidTokenOffsetsException {
- String[] q = { "中国", "外国" };
- long start = new Date().getTime();
- PageBean pb = getPageQuery(1, 4, q);
- System.out.println("页面内容-------开始---");
- List pgResult = pb.getList();
- for (int i = 0; i < pgResult.size(); i++) {
- System.out.println(pgResult.get(i).toString());
- }
- System.out.println("页面内容-------结束---");
- System.out.println("当前页号 " + pb.getCurrentPage());
- System.out.println("是否是第一个页? " + pb.isFirstPage());
- System.out.println("是否是最后页? " + pb.isLastPage());
- System.out.println("存在上一页? " + pb.isHasPreviousPage());
- System.out.println("存在下一页? " + pb.isHasNextPage());
- System.out.println("每页的记录数 " + pb.getPageSize());
- System.out.println("总页数 " + pb.getTotalPage());
- System.out.println("总记录数 " + pb.getAllRow());
- long end = new Date().getTime();
- System.out.println("花费时间:" + (double) (end - start) / 1000 + "秒");
- }
- }
分页类有个小bug
分页的前台scrip
- function changepage(pid){
- var url="";
- if(pid=='1'){
- window.location=url+"&page=1";
- }
- if(pid=='2'){
- window.location=url+"&page=${dataList.currentPage-1}";
- }
- if(pid=='3'){
- window.location=url+"&page=${dataList.currentPage+1}";
- }
- if(pid=='4'){
- window.location=url+"&page=${dataList.totalPage}";
- }
- }
前台分页java
- <table>
- <tr>
- <td>
- <table>
- <c:forEach items="${dataList.list}" var="m"> ${m}</c:forEach>
- </table>
- </td>
- </tr>
- <tr>
- <td>
- <table width="100%" border="0" cellspacing="2" cellpadding="0">
- <tr>
- <td height="25" align="center">
- <div id="page" class="txt_p">
- 共${dataList.totalPage}页
- <c:choose>
- <c:when test="${dataList.hasPreviousPage}">
- <a href="javascript:changepage('1')">首页</a>
- <a href="javascript:changepage('2')"> <img
- src="${skinPath}images/hygl/left_h.gif" align="absmiddle"
- border="0" /> </a>
- <a href="javascript:changepage('2')">上一页</a>
- </c:when>
- <c:otherwise>
- 首页
- <img src="${skinPath}images/hygl/left_b.gif" align="absmiddle" />上一页
- </c:otherwise>
- </c:choose>
- 第${dataList.currentPage}页
- <c:choose>
- <c:when test="${dataList.hasNextPage}">
- <a href="javascript:changepage('3')">下一页</a>
- <a href="javascript:changepage('3')"> <img
- src="${skinPath}images/hygl/right_h.gif" align="absmiddle"
- border="0" /> </a>
- <a href="javascript:changepage('4')">尾页</a>
- </c:when>
- <c:otherwise>
- 下一页<img
- src="${skinPath}images/hygl/right_b.gif" align="absmiddle" />尾页
- </c:otherwise>
- </c:choose>
- </div>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
posted on 2011-09-07 19:31 zhou518zhou 阅读(478) 评论(0) 编辑 收藏 举报