昨天Lucene跟Compass全部结束了,回宿舍做上课留下的练习做到11点多,明天放假,本来想一直做到两点半看球的,西班牙对德国强强对话让我非常期待,可是天不遂人愿,12点的时候居然断网了,一直到今天早上7点多才恢复,郁闷!放假时间看场球都不行。再过两天就要开始做项目了,今天利用放假在宿舍对老师提到的在做的项目中需要用到的知识进行了一下回顾,包括jquery,hibernate,struts中的一些内容,hibernate印象还比较深刻,因为这几天的空余时间一直在研究,但是jQuery和struts基本上忘得差不多了,重新回顾多花了一点时间,一直弄到晚上8点多,最后对昨天的内容进行了总结,这一天过的还是比较充实的。
昨天学习的Compass是对Lucene的封装,跟hibernate有许多相似之处,所以我们学习起来更加简单,我这里就对比hibernate对compass简单总结一下:
Compass以下面一些主要的接口作为主要内容:
CompassConfiguration:作用与hibernate的configuration相同,用来在一些设置参数、配置文件和映射定义上配置Compass。通常用来创建Compass接口。
Compass:作用与hibernate的SessionFactory相同,创建线程安全的实例来打开Compass Seesion。同样还提供了一些搜索引擎索引级别的操作。
CompassSesssion:作用与hibernate的Session相同。用来执行像保存、删除、查找、装载这样的搜索操作。不是线程安全的。下面是hibernate.session中方法与compassSession中方法比对:
Hibernate.Session CompassSession
void save(Object); void create(Object); 保存
void delete(Object); void delete(clazz, id); 删除
void saveOrUpdate(Object); void save(Object); 保存或更新
Object get(clazz, id); Object load(Clazz, id);
Object get(clazz, id); Object load(Clazz, id); 获取
session.createQuery(hql); find(String) 查询
CompassTransaction:作用与hibernate的Transaction相同。是管理Compass事务的接口,使用它并不需要事务管理环境。
跟hibernate一样使用compass也要进行相应的配置,在hibernate中的配置文件的名称问hibernate.hbm.xml而compass的配置文件名为compass.cfg.xml,下面是配置文件一个范例:
<?xml version="1.0" encoding="utf-8" ?>
<compass-core-config
xmlns="http://www.compass-project.org/schema/core-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.compass-project.org/schema/core-config http://www.compass-project.org/schema/compass-core-config-2.2.xsd">
<compass name="default">
<connection>
<file path="./indexDir/" />
</connection>
<mappings>
<class name="cn.itcast.compass.domain.Article" />
</mappings>
<settings>
<setting name="compass.engine.analyzer.default.type"
value="jeasy.analysis.MMAnalyzer" />
<setting
name="compass.engine.highlighter.default.formatter.simple.pre"
value="<font color='red'>" />
<setting
name="compass.engine.highlighter.default.formatter.simple.post"
value="</font>" />
<setting name="compass.engine.highlighter.default.fragmenter.simple.size"
value="20" />
</settings>
</compass>
</compass-core-config>
通过connection的file子标签设置生成的索引库文件路径声明连接信息,Mappings设置声明映射类文件,还可以通过<settings><setting name=”” value=””></setting></settings>的形式设置分词器、高亮器、二级缓存、显示sql语句、自动建表等等,这里的name属性比较长不容易记,我们使用的时候只需要去compass文档中去查就可以了。
在hibernate中我们还需要为每一个实体类配置完这些信息后,还需要配置映射文件,在compass中使用注解的方式进行配置:在类上要有注解:@Searchable,要有@SearchableId属性,其他属性使用@SearchableProperty,可以指定 Store 与 Index,默认的搜索范围是所有可搜索字段,也可以在@SearchableProperty中指定“excludeFromAll = ExcludeFromAll.YES” ,以指定不搜索当前字段。
这样配置完成后我们就可以使用CompassSession中的方法进行各种操作了,总体而言比较简单。