- 浏览: 59328 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (64)
- swing (2)
- java安全 (1)
- web services (1)
- javascript (2)
- jquery (2)
- 技巧 (1)
- 数据库 (6)
- 设计模式 (3)
- java基础 (8)
- 算法 (1)
- ssh2 (0)
- oracle11g下载 (0)
- java 安全 (0)
- 心算 (1)
- servlet (3)
- 日志处理 (1)
- 分页 (1)
- tag (1)
- chm (0)
- lucene (5)
- log4j (1)
- css (1)
- 系统构建 (1)
- ssm (1)
- tomcat (1)
- spring (2)
- 数据结构 (3)
- web基础 (5)
- 构建 (0)
- 异常报错 (0)
- 编码 (2)
- 框架 (1)
- 多线程基础 (1)
- 计算机基础知识 (1)
- linux (3)
- 原理 (2)
最新评论
-
diyulangke:
简单的demo,正常运行,
lucene简单例子 -
wbj0110:
SmartChineseAnalyzer 用lucene4.3 ...
lucene简单例子 -
斑马斑斑:
怎么报错呢
lucene简单例子 -
qq510219366:
tzhz 写道 写的真好,<action name=&q ...
struts2.3.8+spring3.2.1+mybatis3.2.0 -
tzhz:
写的真好,<action name="use ...
struts2.3.8+spring3.2.1+mybatis3.2.0
public class PageBean { private int totalData; //总记录数 private int pagesize; //一页记录数 private int totalPage; //总页数 private int currentPage; //当前页数 private int showPage; //显示多少页,默认显示10页,仿谷歌分页 private int beginPage; //起始页数 private int endPage; //结束页数 private boolean hasPreviousPage; //是否有前一页 private boolean hasNextPage; //是否有后一页 private List list; public PageBean() { pagesize = 5; currentPage = 1; showPage = 10; } public int getTotalData() { return totalData; } public void setTotalData(int totalData) { this.totalData = totalData; } public int getPagesize() { return pagesize; } public void setPagesize(int pagesize) { this.pagesize = pagesize; } public int getTotalPage() { return totalData % pagesize == 0 ? totalData / pagesize : totalData / pagesize + 1; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getShowPage() { return showPage; } public void setShowPage(int showPage) { this.showPage = showPage; } /** * 初始化页面中起始和结束页码,注意在setTotalPage()之后调用此方法 */ public void initbeginPageAndEndPage() { totalPage=getTotalPage(); //总页数小于6 if (this.totalPage < (this.showPage / 2) + 1) { this.beginPage = 1; this.endPage = totalPage; } else { //总页数大于6,但是当前页数小于6 if (this.currentPage <= (showPage / 2) + 1) { this.beginPage = 1; if (this.totalPage >= this.showPage) { this.endPage = this.showPage; } else { this.endPage = this.totalPage; } } else { //总页数大于6,且当前页数大于6 this.beginPage = currentPage - 5; this.endPage = currentPage + 4; if (this.endPage >= this.totalPage) { this.endPage = this.totalPage; } } } } public int getBeginPage() { return beginPage; } public void setBeginPage(int beginPage) { this.beginPage = beginPage; } public int getEndPage() { return endPage; } public void setEndPage(int endPage) { this.endPage = endPage; } public boolean isHasPreviousPage() { return currentPage!=1; } public void setHasPreviousPage(boolean hasPreviousPage) { this.hasPreviousPage = hasPreviousPage; } public boolean isHasNextPage() { return currentPage!=totalPage; } public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } public List getList() { return list; } public void setList(List list) { this.list = list; } }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="${pageContext.request.contextPath}/style/reset.css" type="text/css" rel="stylesheet"/> <link href="${pageContext.request.contextPath}/style/quoteAnalysis.css" type="text/css" rel="stylesheet"/> </head> <body> <div class="pagination"> <c:if test="${pageBean.hasPreviousPage}"> <a href="${pageContext.request.contextPath}/book/bookQuickSearch?currentPage=${pageBean.currentPage-1}${pageURLparam}">上一页</a> </c:if> <c:forEach begin="${pageBean.beginPage}" end="${pageBean.endPage}" step="1" varStatus="v"> <a href="${pageContext.request.contextPath}/book/bookQuickSearch?currentPage=${v.index}${pageURLparam}"> <c:if test="${pageBean.currentPage==v.index}"> <b style="font-color:black"> </c:if> [${v.index}] <c:if test="${pageBean.currentPage==v.index}"> </b> </c:if> </a> </c:forEach> <c:if test="${pageBean.hasNextPage}"> <a href="${pageContext.request.contextPath}/book/bookQuickSearch?currentPage=${pageBean.currentPage+1}${pageURLparam}">下一页</a> </c:if> <input class="txt" type="text" /><input class="btn" type="submit" value="Go"/> 共${pageBean.totalPage}页 </div> </body> </html>
public class BookQuickSearchService { private Logger logger = Logger.getLogger(BookQuickSearchService.class); private TopFieldCollector topFieldCollector; private IndexSearcher indexSearcher; private SearchResult searchResult; private QueryParser queryParser; public IndexSearcher indexSearcherInstance() throws IOException { IndexReader indexReader = IndexReader.open(FSDirectory.open(GenerateBookData.indexFile)); this.indexSearcher = new IndexSearcher(indexReader); return indexSearcher; } public String queryParserInstance(BookQuickSearchParam bookQuickSearchParam) throws IOException { IndexSearcher indexSearcher = indexSearcherInstance(); String myQueryStr="bookName:"+bookQuickSearchParam.getBooknameQueryStr(); if("1".equals(bookQuickSearchParam.getMatchType())){ queryParser = new QueryParser(Version.LUCENE_36, bookQuickSearchParam.getSearchType(), new KeywordAnalyzer()); }else{ myQueryStr=myQueryStr+"*"; if(!StringUtil.isNull(bookQuickSearchParam.getAgeTogether())){ myQueryStr=myQueryStr+" AND age:"+bookQuickSearchParam.getAgeTogether().replaceAll("_",","); } queryParser = new QueryParser(Version.LUCENE_36, bookQuickSearchParam.getSearchType(), new SmartChineseAnalyzer(Version.LUCENE_36)); } return myQueryStr; } public String topScoreDocCollectorInstance(BookQuickSearchParam bookQuickSearchParam) throws IOException { String myQueryStr=queryParserInstance(bookQuickSearchParam); Sort referenceSort=new Sort( new SortField("reference", SortField.INT,"desc".equals(bookQuickSearchParam.getRefTimes())?true:false), new SortField("publishDate",SortField.INT,"desc".equals(bookQuickSearchParam.getPublishDate())?true:false) ); this.topFieldCollector = TopFieldCollector.create(referenceSort,indexSearcher.maxDoc(),true,true,true,true); logger.info("********************************begin Search***************************************"); logger.info("搜索【图书-快速搜索-书名】"); logger.info("主题:"+bookQuickSearchParam.getSearchType()); logger.info("关键词:"+myQueryStr); logger.info("匹配类型:"+("1".equals(bookQuickSearchParam.getMatchType())?"精确匹配":"模糊匹配")); long beginTime = System.currentTimeMillis(); try { indexSearcher.search(queryParser.parse(myQueryStr), topFieldCollector); } catch (ParseException e) { logger.error("解析查询词出错!"); e.printStackTrace(); } long endTime = System.currentTimeMillis(); searchResultInstance(endTime, beginTime); logger.info("一共花费:" + StringUtil.millsecond2Second(endTime - beginTime) + "秒"); logger.info("一共找到了:" + topFieldCollector.getTotalHits() + "记录"); return myQueryStr; } public SearchResult searchResultInstance(long endTime, long beginTime) { this.searchResult = new SearchResult(); searchResult.setTotalHit(topFieldCollector.getTotalHits()); searchResult.setTakeTime(StringUtil.millsecond2Second(endTime - beginTime)); return searchResult; } public List bookQuickSearchPaging(BookQuickSearchParam bookQuickSearchParam, PageBean pageBean) throws IOException { List<Book> bookList = new ArrayList<Book>(); topScoreDocCollectorInstance(bookQuickSearchParam); ScoreDoc[] scoreDocs = topFieldCollector.topDocs((bookQuickSearchParam.getCurrentPage() - 1) * pageBean.getPagesize(), pageBean.getPagesize()).scoreDocs; for (int i = 0; i < scoreDocs.length; i++) { ScoreDoc scoreDoc = scoreDocs[i]; Book book = doc2book(scoreDoc.doc); bookList.add(book); } if(bookList.size()>0){ logger.info("【图书-快速搜索-书名】搜索到了以下的图书:"); } for (int i = 0; i < bookList.size(); i++) { logger.info("第"+(i+1)+"本:"+bookList.get(i)); } logger.info("********************************end Search***************************************"); return bookList; } public Map<String, Integer> bookQuickSearchALl(BookQuickSearchParam bookQuickSearchParam) throws IOException { List<Book> bookList = new ArrayList<Book>(); String myQueryStr=queryParserInstance(bookQuickSearchParam); ScoreDoc[] scoreDocs=null; TopDocs topDocs=null; try { topDocs= indexSearcher.search(queryParser.parse(myQueryStr), indexSearcher.maxDoc()); scoreDocs=topDocs.scoreDocs; } catch (ParseException e) { logger.error("解析查询词出错!"); e.printStackTrace(); } Map<String, Integer> bookmap = new TreeMap<String, java.lang.Integer>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }); for (int i = 0; i < scoreDocs.length; i++) { ScoreDoc scoreDoc = scoreDocs[i]; Document doc = indexSearcher.doc(scoreDoc.doc); if(bookmap.containsKey(doc.get("age"))){ bookmap.put(doc.get("age"),bookmap.get(doc.get("age"))+1); }else{ bookmap.put(doc.get("age"),1); } } return bookmap; } public Book doc2book(int docid) throws IOException { Document doc = indexSearcher.doc(docid); Book book = new Book(); book.setBookid(doc.get("bookid")); book.setBookname(doc.get("bookName")); book.setAuthor(doc.get("author")); book.setPublisher(doc.get("publisher")); book.setSubject(doc.get("subject")); book.setAge(doc.get("age")); book.setClassify(doc.get("classify")); book.setReference(doc.get("reference")); book.setPublishDate(doc.get("publishDate").substring(0, 4) + "-" + doc.get("publishDate").substring(4)); book.setISBN(doc.get("ISBN")); book.setPage(doc.get("page")); book.setRefDocumentPattern(doc.get("refDocumentPattern")); return book; } public TopFieldCollector getTopFieldCollector() { return topFieldCollector; } public void setTopFieldCollector(TopFieldCollector topFieldCollector) { this.topFieldCollector = topFieldCollector; } public IndexSearcher getIndexSearcher() { return indexSearcher; } public void setIndexSearcher(IndexSearcher indexSearcher) { this.indexSearcher = indexSearcher; } public SearchResult getSearchResult() { return searchResult; } public void setSearchResult(SearchResult searchResult) { this.searchResult = searchResult; } }
相关推荐
本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...
在本文中,我们将深入探讨如何使用Lucene查询工具类和`IndexSearcher`进行分页查询,这在处理大量数据时尤其有用。Lucene是一个强大的全文搜索引擎库,它提供了高效、可扩展的文本检索功能。在Java开发环境中,...
在lucene搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
本文将深入探讨"Lucene5学习之分页查询"这一主题,结合给定的标签"源码"和"工具",我们将讨论如何在Lucene5中实现高效的分页查询,并探讨其背后的源码实现。 首先,理解分页查询的重要性是必要的。在大型数据集的...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
赠送jar包:lucene-spatial3d-6.6.0.jar; 赠送原API文档:lucene-spatial3d-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial3d-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial3d-6.6.0.pom; 包含...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...
综上所述,这个项目展示了如何利用SSH框架与Lucene搜索引擎技术,实现一个功能完备的新闻搜索系统,包括高效搜索、结果排序、分页展示以及关键词高亮等特性。这样的系统对于提升新闻网站的用户体验具有重要意义。
4. **lucene分页.txt** 分页在大型数据集的搜索中非常重要。这份文档可能讲解了如何在Lucene中实现搜索结果的分页显示,包括设置查询范围、控制返回结果的数量等技巧。 5. **Lucene 的学习 .txt** 这是另一份全面...
本篇文章将带你迈出使用Lucene的第一步,重点关注如何实现分页检索,这对于构建高效、用户友好的搜索系统至关重要。 Lucene的核心功能包括文档索引、查询解析和结果排序。在分页检索方面,我们需要考虑如何有效地...
**Lucene.net 知识点详解** Lucene.net 是 Apache Lucene 的 .NET 版本,...以上就是关于 Lucene.net 建立索引、检索及分页的关键知识点。理解并熟练运用这些概念,可以帮助开发者构建高效、灵活的全文搜索解决方案。
本资料主要探讨了Lucene中的排序、过滤和分页技术,这些都是构建高效、实用的信息检索系统的重要组成部分。 **排序(Sorting)** 排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果...
五、Lucene分页搜索 在实际应用中,通常需要对搜索结果进行分页显示,以改善用户体验。Lucene提供了分页搜索的功能,通过设置TopDocs的参数,我们可以限制返回的结果数量,实现分页效果。此外,ScoreDoc类可以帮助...
标题中的“使用Lucene4.7实现搜索功能,分页+高亮”表明我们要讨论的是如何利用Apache Lucene 4.7版本来构建一个具备搜索、分页和高亮显示功能的系统。Lucene是一个高性能、全文本搜索引擎库,它提供了强大的文本...
这篇博客文章“对内存中Lucene查询的集合进行分页”探讨的是如何在处理大量数据时,有效地对Lucene查询结果进行分页显示,以提高用户体验并减轻服务器负担。 首先,理解Lucene的基本工作原理至关重要。Lucene通过...