Compass 更智能的搜索引擎(2)--进阶
来源:互联网 发布:亚马逊app网络连不上 编辑:程序博客网 时间:2024/05/04 04:22
经过了Compass 更智能的搜索引擎(1)–入门的学习,想必对于Compass的使用有了更深的认识了吧。下面谈点更加切合实际开发的东西。那就是CRUD.
- 面向对象的分页
- dao层实现
- 代码释义
- 优点一
- 优点二
面向对象的分页
分页获得的一个个的页面本身就是一个对象,所以我这样设计页面Page.java
/** * @Date 2016年8月2日 * * @author Administrator */package domain;import java.util.List;/** * @author 郭瑞彪 * */public class Page<T> { private List<T> lists; private int totalResults; public List<T> getLists() { return lists; } public void setLists(List<T> lists) { this.lists = lists; } public int getTotalResults() { return totalResults; } public void setTotalResults(int totalResults) { this.totalResults = totalResults; } @Override public String toString() { return "Page [lists=" + lists + ", totalResults=" + totalResults + "]"; }}
dao层实现
/** * @Date 2016年8月2日 * * @author Administrator */package dao;import java.util.ArrayList;import java.util.List;import org.compass.core.CompassHits;import org.compass.core.CompassSession;import org.compass.core.CompassTransaction;import domain.Article;import domain.Page;import util.CompassUtils;/** * @author 郭瑞彪 * */public class ArticleIndexDao { /** * 保存到索引库 * * @param a */ public void save(Article a) { CompassSession session = CompassUtils.getCompassSessionFactory().openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); session.create(a); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e); } finally { session.close(); } } /** * 删除索引库中对应的索引 * * @param id */ public void delete(Integer id) { CompassSession session = CompassUtils.getCompassSessionFactory().openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); session.delete(Article.class, id); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e); } finally { session.close(); } } /** * 更新索引 * * @param a */ public void update(Article a) { CompassSession session = CompassUtils.getCompassSessionFactory().openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); session.save(a);// 添加或者更新,照应了优化以减少代价 tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e); } finally { session.close(); } } /** * 支持分页的查询 * * @param queryString * 查询字符串 * @param firstResult * 开始查询页码 * @param maxResult * 每页的数据量 * @return */ public Page search(String queryString, int firstResult, int maxResult) { CompassSession session = CompassUtils.getCompassSessionFactory().openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); // 查询,得到结果 CompassHits hits = session.find(queryString); Page page = new Page(); page.setTotalResults(hits.getLength()); List<Article> articles = new ArrayList<Article>(); // 分页机制,获取一段数据 firstResult = firstResult >= 0 ? firstResult : 0; int endResult = Math.min(firstResult + maxResult, hits.getLength()); for (int i = firstResult; i < endResult; i++) { Article a = (Article) hits.data(i); articles.add(a); } page.setLists(articles); tx.commit(); return page; } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e); } finally { session.close(); } }}
代码释义
优点一
DAO层代码的设计必须有很强的容错性及弹性。
public void save(Article a) { CompassSession session = CompassUtils.getCompassSessionFactory().openSession(); CompassTransaction tx = null; try { tx = session.beginTransaction(); session.create(a); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } throw new RuntimeException(e); } finally { session.close(); } }
从这段代码中,就能略见一斑了。
如果代码正确执行,则业务正常通过。
如果代码catch到了一场,就会滚刚才的操作,保证数据的正确性,并throw出去,告知上层调用者。
最后,无论代码正确还是错误,都会执行释放资源的操作。保证系统的高效,稳定。
优点二
// 分页机制,获取一段数据 firstResult = firstResult >= 0 ? firstResult : 0; int endResult = Math.min(firstResult + maxResult, hits.getLength()); for (int i = firstResult; i < endResult; i++) { Article a = (Article) hits.data(i); articles.add(a); }
我们应该学习的就是这样的敏捷开发的经验,充分的考虑到可能发生的状况。来保证代码的正确的运行。
1 0
- Compass 更智能的搜索引擎(2)--进阶
- Compass 更智能的搜索引擎(1)--入门
- Compass 更智能的搜索引擎(3)--高亮,排序,过滤以及各种搜索
- compass搜索引擎的应用
- 搜索引擎Compass的例子
- 基于Java的搜索引擎:Compass
- 基于Java的搜索引擎:Compass
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎
- 利用Compass实现一个简单的搜索引擎[转贴]
- 请问哪位熟悉compass/lucene搜索引擎的啊
- 搜索引擎——全文检索Compass(一)
- 更精确的RSS Feeds搜索引擎 - Feedmil
- 搜索引擎关键字智能提示的一种实现
- 搜索引擎关键字智能提示的一种实现
- react学习之redux(二)
- 配置本地和共享yum源,定制属于自己的yum仓库
- 设计模式---创建类型---工厂方法
- 基础知识java
- php7移除的一些函数
- Compass 更智能的搜索引擎(2)--进阶
- 蓝队网络工作日志
- 文章标题
- view file in hex in mac os
- fcntl.h头文件和unistd.h头文件
- Android性能优化--手机篇
- 设计模式---创建类型---原型
- XFS实现原理详解
- Java初学者常见问题_字符串序列化_可变不可变_传递(值,引用)