- 浏览: 56812 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (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搜索分页过程中,可以有两种方式 一种是将搜索结果集直接放到session中,但是假如结果集非常大,同时又存在大并发访问的时候,很可能造成服务器的内存不足,而使服务器宕机 还有一种是每次都重新进行搜索,这样...
一步一步跟我学习lucene是对近期做lucene索引的总结,大家有问题的话联系本人如蒙加入,不胜感激,大家共同探讨,本人争取每日一博,希望大家持续关注,会带给大家惊喜的
NULL 博文链接:https://iamyida.iteye.com/blog/2193345
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 + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎
lucene的排序过滤和分页,lucene开发技术,lucene下载
利用Lucene.net做的建立索引,检索分页
NULL 博文链接:https://llying.iteye.com/blog/581411
lucene实例是一个比较详细的例子,包括lucene的入门到高级实例,代码里有比较详细的实例,所有的实例都是通过junit来测试的。实例包括各种搜索:如通配符查询、模糊查询、查询结果的分页、中文分词器、自定义分词器...
springmvc+mybatis+lucene4文档搜索系统(支持分页)
包括 lucene.net 介绍, lucene.net工作模式, lucene.net分词方法和中文分词方法, lucene.net索引的建立详解, lucene.net搜索详解, lucene.net的下载方法, lucene.net搜索结果实现分页。
NULL 博文链接:https://huyana-town.iteye.com/blog/2197476