今天还是汤老师教全文检索技术.今天学习的是 Compass.这个框架是对 Lucene 的封装.不过使用上和 Hibernate 却有很多相似的地方.所以,老师今天先领我们复习了一下 Hibernate 的 API 和使用方法.并在讲解 Compass 的时候,进行对比讲解.让我们更容易理解和加深记忆.昨天的 Lucene 学习好了,对全文检索理解了.今天的 Compass 学习起来非常的轻松.使用 Compass 实现全文检索可以大大的提高我们的开发时间.
1. Hibernate 和 Compass 从总体上进行对比.
Hibernate:
是ORM框架,面向对象的操作.提供从对象 到表,从表到对象服务.是对JDBC的一种封装.
通过Session,提供save()/delete()/update()/get /load()/hql/QBC等方法.
Hibernate.cfg.xml 配置数据库链接信息,声明映射文件,和其他配置.
.hbm.xml 对象到表,属性到列的对应关系.
Compass:
是 OSEM/Compass.从对象到 document,从 document 到对象.是对 Lucene API 的一种封装.
通过 CompassSession.提供save()/delete()/update()/get/load()/queryString/Query等方 法.
Compass.cfg.xml 配置链接信息(索引目录),声明映射文件,和其他配置
.pom.xml 对象到document,属性到field的对应关系.
2. 在使用上进行对比.
Hibernate:
Hibernate.cfg.xml
Configuration
①编程方式:
cfg. = new Configuation();
cfg.setPropxxx();
cfg.setPropxxx();
…
② 配置文件
Cfg = new Configration().configure();
Cfg.configure(“/hibernate.cfg.xml”);
③Hbm.xml
使 用.hbm.xml文件(XML文件)
注解
Compass:
主 配置
CompassConfiguration
①编程方式
Cfg = new CompassConfiguration()
Cfg.set(“key”,”value”);
…
② 配置文件
Cfg.configure();
//cfg.configure(“/compass.cfg.xml”);
③ 映射文件:
XML文件
注解
3.API的对比
Hibernate:
Fg = new Configuration().configure();
Sf = cfg.buildSessionFactory();
Session = sf.openSession();
Tx = session.beginTransaction();
//do something
//session.save/update/delete/…..()
Tx.commit();
Session.close();
Compass:
Cfg = new CompassConfiguration().configure();
Compass = cfg.buildCompass();
CompassSession session = compass.openSession();
CompassTransaction tx = session.beginTransaction();
//do something
//session.save/update/delete/….()
Tx.commit();
Session.close();
4.API:
Configuration --> CompassConfiguration
SessionFactory --> Compass
Session --> CompassSession
Transaction --> CompassTransaction
5.Session方法:
保 存: save() --> create()
删除:delete() --> delete()
Update() --> save()
saveOrUpdate() --> save()
get/load() --> get/load()
6.Compass 是使用过程
1)导入 jar包
2)对映射文件进行配置.这里采用的是注解 方式.
@Searchable
在对象类前注释.
@SearchableId
在对象的ID属性上注释.
@SearchableProperty(store = Store.YES, index = Index.ANALYZED, boost = 2.0F)
在对象的普通属性上注释.
store = Store.YES是否存储
index = Index.ANALYZED是否建立索引
boost = 2.0F对排序起到作用.
3)加载相关的配置文件
private Compass compass;
public void init() {
CompassConfiguration cfg = new CompassConfiguration();
cfg.setConnection("./indexPath/");// 连接信息
cfg.addClass(Article.class);// 声明映射信息
// cfg.setSetting("key", "value");//其他配置
compass = cfg.buildCompass();
}
4)创建索引
CompassSession session = compass.openSession();
CompassTransaction tx = session.beginTransaction();
session.create(article);
tx.commit();
session.close();
5)搜 索
List<Article> list = new ArrayList<Article>();
CompassSession session = compass.openSession();
CompassTransaction tx = session.beginTransaction();
CompassHits hits = session.find(queryString);
for (int i = 0; i < hits.length(); i++) {
Article article = (Article) hits.data(i);
list.add(article);
}
tx.commit();
session.close();
总结:
通过上面实例行程序的编写,可以和昨天学习的 luncene 形成鲜明的对比.不过,老师说了,就像学习 Hibernate 一样,JDBC 没有学习好 Hibernate 是不可能学好的.同样 luncene ,基础没有学习好,Compass 是不可能学习好的,就算会用,也不能理解.不能达到一定的高度.所以,学习要了解的深入一些.不能只是皮毛.