今天还是汤老师教全文检索技术.今天学习的是 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
是不可能学习好的,就算会用,也不能理解.不能达到一定的高度.所以,学习要了解的深入一些.不能只是皮毛.