- 浏览: 565293 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
分页类
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>
发表评论
-
关于Lucene的讨论
2011-01-01 10:20 1065分类为[lucene]的文章 ... -
有关Lucene的问题(收藏)推荐
2010-12-30 21:02 1110有关Lucene的问题(1):为 ... -
Lucene 学习总结(收藏)推荐
2010-12-30 20:54 1563Lucene学习总结之一:全文检索的基本原理 ... -
基于Lucene的Compass 资源(收藏)
2010-12-29 18:29 11491.2、Compass相关网上资源 1、官方网站1: http ... -
Lucene 3.0.2索引文件官方文档(二)
2010-12-28 22:36 1010Deletable File A writer dy ... -
Lucene 3.0.2索引文件官方文档(一)
2010-12-28 22:34 1462Apache Lucene - Index File ... -
Lucene 3.0 索引文件学习总结(收藏)
2010-12-28 22:28 941lucene学习1——词域信息 ... -
Lucene 字符编码问题
2010-12-27 20:29 995现在如果一个txt文件中包含了ANSI编码的文本文件和Uni ... -
Lucene 字符编码问题
2010-12-27 20:20 1036现在如果一个txt文件中包含了ANSI编码的文本文件和Unic ... -
Annotated Lucene(源码剖析中文版)
2010-12-25 22:52 1266Apache Lucene是一个高性能(high-pe ... -
Lucene 学习推荐博客
2010-12-25 22:42 1035深未来deepfuturelx http://deepfut ... -
Lucene3.0 初窥 总结(收藏)
2010-12-25 22:16 1818【Lucene3.0 初窥】全文检索的基本原理 ... -
转:基于lucene实现自己的推荐引擎
2010-12-17 17:05 1058采用基于数据挖掘的 ... -
加速 lucene 的搜索速度 ImproveSearchingSpeed(二)
2010-12-17 17:01 1033本文 为简单翻译,原文在:http://wiki.apac ... -
加速 lucene 索引建立速度 ImproveIndexingSpeed
2010-12-17 16:58 1074本文 只是简单的翻译,原文 在 http://wiki.a ... -
lucene 3.0 中的demo项目部署
2010-12-15 22:02 976转自:bjqincy 1 在myEclipise 建立 ... -
Lucene 3.0.2 源码 - final class Document
2010-12-14 22:33 894package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - final class Field
2010-12-14 22:29 960package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - abstract class AbstractField
2010-12-14 22:28 1042package org.apache.lucene.do ... -
Lucene 3.0.2 源码 - interface Fieldable
2010-12-14 22:28 1182package org.apache.lucene.do ...
相关推荐
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
lucene 3.0 API中文帮助,学习的人懂得的
【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...
《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...
【Lucene3.0 使用教程】是针对Java开发者的一个指南,旨在教授如何利用Apache Lucene 3.0.1版本实现全文检索功能。Lucene是一个高性能、可伸缩的开源全文检索库,它提供了文本分析、索引创建、文档检索等核心功能。...
lucene3.0 中文分词器, 庖丁解牛
这里的"lucene3.0核心jar包"是 Lucene 的一个重要版本,发布于2009年,为当时的开发人员提供了构建全文搜索引擎的基础框架。 在 Lucene 3.0 中,以下几个关键知识点值得关注: 1. **索引结构**:Lucene 使用倒排...
这里我们主要聚焦于`lucene3.0`版本,该版本在当时是Lucene的一个重要里程碑,引入了许多改进和新特性。 1. **索引构建**: 在Lucene3.0中,索引是数据检索的基础。它通过将文本数据转换为倒排索引来实现快速查询...
lucene3.0-highlighter.jar lucene3.0的高亮jar包,从lucene3.0源码中导出来的
在 Lucene 3.0 版本中,虽然已经相对较旧,但仍然包含了基本的搜索引擎功能,适用于简单或特定场景的搜索需求。在这个实例中,我们将探讨如何在 JDK 1.5 和 Lucene 3.0 的环境下构建和运行一个简单的搜索引擎。 ...
**Lucene 3.0 全文信息检索** Lucene 是一个由Apache软件基金会4 Jakarta项目组开发的开源全文检索引擎工具包。自1999年发布以来,Lucene 已经发展成为Java世界中最为广泛使用的全文检索库,为开发者提供了构建高...
在使用lucene3与paoding集成的时候可能会出现以下错误: Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z at org.apache.lucene.index....
在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...
《深入剖析Lucene3.0:庖丁解牛与索引搜索实践》 在IT行业中,搜索引擎技术扮演着至关重要的角色,而Lucene作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene3.0版本,结合“庖丁解...
在本文中,我们将深入探讨Lucene 3.0版本,了解其核心概念、功能特性,并通过实例来展示如何使用这个强大的工具。 ### 1. Lucene 3.0核心概念 #### 1.1 文档与字段 在Lucene中,数据是以文档(Document)的形式...
本文将重点介绍如何使用 Lucene 3.0 实现全文检索的基本步骤,以及与前一版本 Lucene 2.0 的主要区别。 **1. 安装与环境配置** 首先,你需要下载 Lucene 3.0 的发行版,并将其添加到你的项目类路径中。确保你的开发...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
**Lucene 3.0 API 更新与改进** 1. **SegmentMerger 改进**: Lucene 3.0 中,`MergePolicy` 和 `MergeScheduler` 分离,提供更灵活的索引合并策略。 2. **N-gram 查询支持**: 新增了对 N-gram 查询的支持,增强了...