Hibernate Search
来源:互联网 发布:知有儿童挑促织 编辑:程序博客网 时间:2024/05/24 22:44
Hibernate Search
Hibernate Search是Hibernate的子项目,把数据库全文检索能力引入到项目中,并通过"透明"(不影响既有系统)的配置,提供一套标准的全文检索接口。
全文检索的概念
在进入正文之前,有必要介绍一下全文检索的概念。简单来说,Google就是一个全文检索引擎。全文检索允许用户输入一些关键字,从数据层中查找到所需要的信息。此外全文检索和数据库"LIKE"语句相比,没有数据库开销或是数据库的开销非常小,因为检索过程全部从通过检索文件完成,因此效率非常高。此外,全文检索引擎可以提供的还远不止"LIKE"语句这么多。在全文检索领域,用户输入的搜索信息叫做关键字,而全文检索系统把海量信息按照这些关键字进行结构化处理,把文章打散成段落、文字,最后,按关键字对文章的数据进行分类。这个处理后的数据文本叫做检索文件,检索文件往往比实际数据小得多,但它的数据所包含的信息量损失却非常小。当用户输入一个关键字时,全文检索引擎可以很快地定位到相关文本。
什么是Lucene
Lucene是一个开源的全文检索引擎,目前已经成为了Apache基金会赞助项目。Lucene是Java社区非常流行的全文检索引擎,功能强大。它不仅可以检索一般的数据文本,还可以检索PDF、HTML及微软的Word文件等。此外,Lucene成功的原因之一是它开放的框架,几乎框架的每一部分都可以扩展。它的文本分析器可以定制,检索文件存储方式可以定制,查询引擎也有不同的可选方案,如果愿意,还可以自已定制。此外,它提供一套非常强大的API接口,使客户用起来很方便。此外,Lucene除支持非结构化检索\footnote{用户输入一个关键字,全文检索引擎去匹配任何字段包含该关键字的数据条目。}外,还支持结构化检索(用户可以指定具体搜索的model类、字段名以及搜索条件)。这章的重点不是Lucene,但做为Hibernate Search的核心,您有必要对它的基本概念有所了解。下面介绍一些Lucene中的基本概念:
- Document:在Lucene中,一个Document即一个搜索单元。举例来说:如果对一个用户表做检索,那么每条用户信息就是一个Document。
- Field:每一个Document都包含一或多个Field,每一个Field都是key-value数据对。
- Analyzer:分析器/断字器。这是全文检索引擎的心脏,如何将一篇文章打散成一些关键字,并能够不丢失信息量,这是一门单独的学科。Lucene提供多种Analyzer,并提供开放的接口让社区的专家提供新的Analyzer。
- Index:系统生成的检索信息,这里面存储了Document。
- IndexSearcher:IndexSearcher负责检索Index内容负责给出检索结果。
- IndexWriter:IndexWriter负责调用Analyzer,分析后生成Index。
Lucene、Hibernate Search及Hibernate的联系
如果在本项目中直接使用Lucene,将不得不面临一些问题。因为本项目是基于数据库的,
因此,当数据库中的数据发生变化时,就必须手工触发Lucene,让它随之更新检索文件中的内容,使之与数据库中的实际数据保持一致。这也就意味着dao中的每一个函数都要插入一段Lucene的代码,这样做有违OCP原则,这一层面应被提取到单独的逻辑层。此外model类别如何映射到全文检索引擎中,这也是一个问题,必须要手工处理这种映射关系,这样使用Lucene的代价就大大增加了。为了解决这些使用上的问题,Hibernate Search应运而生。
那么,Lucene、Hibernate Search及Hibernate三者之间是什么样的关系呢?请见下图:
如图所示,Hibernate+Hibernate Search位于全文检索数据目录及实际数据库中间。一方面,Hibernate处理与数据库相关的事宜,另一方面Hibernate Search会根据数据库中实际数据的情况,自动触发更新全文检索数据目录。此外Hibernate Search自动完成model层数据类对Lucene检索文件结构的映射。
安装Hibernate Search
如果需要在项目中使用Hibernate Search功能,请在Maven的pom.xml配置文件中添加下述dependency:
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-search</artifactId>
- <version>5.2.0.GA</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-search</artifactId>
- <version>5.2.0.GA</version>
- </dependency>
修改Hibernate.cfg.xml配置使用Hibernate Search
<span style="font-family:SimSun;font-size:14px;"><property name="hibernate.search.default.directory_provider"> org.hibernate.search.store.FSDirectoryProvider </property> <property name="hibernate.search.default.indexBase"> D:/temp/index </property> <mapping resource="com/rbh/examples/Guestbook.hbm.xml" /> <event type="post-update"> <listener class="org.hibernate.search.event.FullTextIndexEventListener" /> </event> <event type="post-insert"> <listener class="org.hibernate.search.event.FullTextIndexEventListener" /> </event> <event type="post-delete"> <listener class="org.hibernate.search.event.FullTextIndexEventListener" /> </event> <event type="post-collection-recreate"> <listener class="org.hibernate.search.event.FullTextIndexCollectionEventListener" /> </event> <event type="post-collection-remove"> <listener class="org.hibernate.search.event.FullTextIndexEventListener" /> </event> <event type="post-collection-update"> <listener class="org.hibernate.search.event.FullTextIndexEventListener" /> </event> </span>
总结
Hibernate Search主要有以下功能特点:
1,功能强大,配置简单 - 配置只需要修改persistence.xml(JPA),hibernate.cfg.xml(Hibernate)
2,支持Hibernate,以及EJB3 JPA标准应用
3,集成全文搜索引擎Lucene - Lucene是Apache项目组下的一个功能强大的全文搜索引擎项目
4,可以简单透明索引查询过的数据
5,支持复杂检索 - 支持Wild Card(诸如*, ?等通配符号),多关键字,模糊查询,排序等
6,支持Clustering
7,支持直接访问Lucene API
8,对Lucene索引,API的高效管理。
Hibernate Search运行的环境如下:
1、JDK或JRE 5.0以上
2、Hibernate-Search以及相应的依赖包
3、Hibernate Core 3.2.X
4、Hibernate Annotations 3.3.X
- hibernate search
- hibernate -search
- Hibernate Search
- Hibernate Search
- Hibernate search
- [Hibernate Search] (1) 初识Hibernate Search
- Hibernate Search牛刀小试
- Hibernate Search 3.0 GA
- 初试Hibernate Search
- Hibernate Search in Action
- hibernate search 初始问题
- Hibernate Search试用总结
- hibernate search boost
- hibernate search 实体映射
- hibernate search 自动索引
- hibernate search 分页(Pagination)
- hibernate search sort()
- lucene 和hibernate search
- 如何搜狗浏览器标题栏小图片不显示问题
- JVM运行时数据区
- Android属性动画深入分析:让你成为动画牛人
- java-IO流(上)
- Ubuntu14.0 下Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法
- Hibernate Search
- poj 3070 Fibonacci 矩阵快速幂
- JPush极光推送个人理解
- Groovy笔记-关于joda-time和excel-import插件适用的grails版本问题
- VC编程实现对位图图像自动色阶处理
- 使用surfaceview画贝塞尔曲线+旋转背景图片
- iOS笔记(常用的一些知识点)
- 图片文件不是项目一部分或其"生成操作"属性未设置为“资源”
- Meteor Shower 广搜