不久前Hibernate推出了Hibernate Search 3.0 GA,由它的名字大家也可以大概猜到它的作用是对数据库中的数据进行检索的。它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql语句中like匹配)。
Hibernate Search运行的环境如下:
1、JDK或JRE 5.0以上
2、Hibernate-Search以及相应的依赖包
3、Hibernate Core 3.2.X
4、Hibernate Annotations 3.3.X
一、配置
使用过Lucene的人都知道,Lucene是使用Directory这个概念来存储索引文件的,所以在Hibernate Search中提供了一个初始化、配置化的工厂类DirectoryProvider来生成相应的Directory。而在这里,我使用了 FSDirectoryProvider这个工厂类,其中FS代表文件系统,意思是索引文件保存在文件系统中。因此,我们在hibernate.cfg.xml文件中加入了一下内容:
<property name="hibernate.search.default.directory_provider">
org.hibernate.search.store.FSDirectoryProvider
</property>
<property name="hibernate.search.default.indexBase">
E:/temp/index
</property>
其中属性hibernate.search.default.indexBase代表索引文件默认的保存位置。
这些属性设置完成后,接下来就是使用Annotation对指定POJO的指定属性进行配置了。如下:
@Indexed(index = "text")
public class Text implements java.io.Serializable
{
@DocumentId
private Integer id;
private String fileName;
private String filePath;
@Field(name = "content", store = Store.NO, index = Index.TOKENIZED, analyzer = @Analyzer(impl = ChineseAnalyzer.class))
private String content;
......
}
其中@Indexed用于标示需要建立全文索引的实体类,它包含一个属性index用于标示这个全文索引的名字
@DocumentId用于标示实体类中的唯一的属性保存在索引文件中,是当进行全文检索时可以这个唯一的属性来区分索引中其他实体对象,一般使用实体类中的主键属性
@Field就是用来标示Lucene的Field字段,其中name属性用于标示Field的名称,store属性用于标示这个属性的内容是否需要保存在索引中,index属性标示该字段属性是否进行分词(Index.TOKENIZED),analyzer用于标示建立索引时所使用的分析器是什么类,这里使用Lucene自带的ChineseAnalyzer
二、建立索引
配置完成以上设置之后,Hibernate Search的配置工作算是大功告成了,剩下的就是如何在编码时使用到Hibernate Search。其实Hibernate Search的使用与我们平时Hibernate的使用基本一致,索引的建立工作是可以由Hibernate Search后台自动处理的,无需手工操作,其中的主要差别有
1、Configuration
由于本文中Hibernate Search配置是由Annotation来完成的,所以我们在初始化Configuration、SessionFactory、Session时应该这样写:
factory = new AnnotationConfiguration().configure(file).buildSessionFactory();
使用AnnotationConfiguaration来代理平常使用的Configuration
2、Session
要使用Hibernate Search的功能就不能单纯使用平常的Session来开始事务,进行数据库操作,而是应该改用FullTextSession
//获取Session
Session session = HibernateUtil.getSession();
//封装Session为FullTextSession
FullTextSession fullTextSession = Search.createFullTextSession(session);
//开始事务
Transaction tx = fullTextSession.beginTransaction();
......
//提交事务
tx.commit();
//关闭会话
fullTextSession.close();
这样,我们使用FullTextSession进行save,update,delete操作hibernate search将会自动根据配置在后台对相应的域建立全文索引了
三、检索
接下来就是说一下如何使用全文检索功能来检索实体对象了。
Session session = HibernateUtil.getSession();
FullTextSession fullTextSession = Search.createFullTextSession(session);
Transaction tx = fullTextSession.beginTransaction();
QueryParser parser = new QueryParser("content", new ChineseAnalyzer());
Query query = fullTextSession.createFullTextQuery(parser.parse(word),
Text.class);
List result = query.list();
for (int i = 0; result != null && i < result.size(); i++)
{
Text pojo = (Text) result.get(i);
System.out.println("文件名:" + pojo.getFileName());
System.out.println("文件路径:" + pojo.getFilePath());
System.out.println();
}
tx.commit();
fullTextSession.close();
首先是建立相应的QueryParser由他来对输入的关键字进行切分后产生Lucene下的Query实例,最后通过FullTextSession的 createFullTextQuery方法生成hibernate下的Query实例,执行list方法即可获得查询的实例结果集合。
http://www.iteye.com/topic/128957?page=1
分享到:
相关推荐
根据hibernate文档作的例子/ 包括:测试mysql5.0连接的例子和hibernate应用的例子. 内附note目录:有详尽的说明. 注意: note中有一个错误: TestJDBC执行前,要把web-inf\lib\mysql dirver 复制到Tcomcat中的common\lib...
研究生初试录取信息管理系统 课程设计 说明书
csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟...
课程设计中的使用visual studio编写的c++代码,研究生初试录取管理系统,任务书已经找不到了,,,所有代码+调试文件如上
武汉科技大学 计算机 考研 软件工程初试 包含 -- 期末考试试卷 -- 真题 --预测
应聘人员初试测评表 评价人姓名: 职务: 面试时间: 应聘人姓名: 性别: 年龄: 编号: 应聘职位: 原单位: 评价方向 评价要素 评价等级 1(差) 2(较差) 3(一般) 4(较好) 5(好) 个人基本素质 评价 1、...
国家对初试录取分数有总分要求(如某一年要求4门课总分应达到310分),另外还有对每门课的最低分数要求(如总分为100的试卷最低应达到40分,总分为150的试卷最低应达到65分)。编程统计初试合格的人数,并按总分由高...
安徽大学,计算机科学与技术,考研初试资料,希望能帮助到各位考研er 考研初试资料 考研初试资料 考研初试资料
嵌入式工程师初试试题,主要有C程序设计部分,单片机基础部分,arm部分
研究生初试录取代码 java 操作 绝对经典
武汉理工初试复试汇总-852数据结构复习课件及文档+数据结构研究生入学考试试题,+复试经验
研究生初试cpp文件,可以完成文件操作功能,统计研究生录取结果
新人教统编版六年级下册语文 交流平台与初试身手课件 教学课件.pptx
09年高校初试排名09年高校初试排名09年高校初试排名
新人教统编版五年级下册语文 交流平台与初试身手 课件.pptx
初试extJs初试extJs初试extJs初试extJs初试extJs初试extJs
大连大学2023年初试科目大纲汇总.rar
C语言 关于研究生初试录取管理系统的C语言课程设计报告
研究生初试录取系统 c 课程设计报告
c语言竞赛初试试题和答案,希望对大家有点用处。