Getting started with Hibernate Searchjava
本章内容包括:
■ 什么是 Hibernate Search?
■ 如何创建和配置 Hibernate Search
■ 领域模型映射简介
■ 数据索引简介
■ 全文查询简介
■ 如何使用 Luke
在第1章, 咱们讨论了集成全文搜索引擎
的复杂性
,好比将
Apache Lucene整合到一个基于领域模型和使用Hibernate或Java持久化框架(JPA)的Java应用中。更确切的说,咱们发现了3个有差别的地方
:
■ 结构不一致—如何将对象领域转换成纯文本的索引;如何处理索引中对象之间的关系。
■ 同步不匹配—如何保持数据库和索引实时同步。
■ 检索差别—如何将以领域模型为核心的数据检索方法和全文搜索技术进行
无缝的整合
Hibernate Search在平衡Hibernate ORM和Apache Lucene(全文搜索引擎)的技术差别中起到了杠杆通常的做用。本章为你提供了一个Hibernate Search的全局概览:如何使用,如何快速的构建全文搜索,以及如何将其融入到Hibernate的编程模型中。
Hibernate Search是一个用于补充Hibernate核心对于实体模型全文检索的支持不足而产生的项目。Hibernate大概是目前Java世界中最受欢迎的而且使用最多的ORM(对象-关系映射)工具(框架)。ORM的好处就是你能够以纯面向对象的方式(注:尽管我认为大部分是理想化的或者理论化的)来表达你的领域模型,而且它能够将这个模型透明的持久化到一个关系型数据库中。Hibernate(core)可使用多种面向对象的方式去表达一个查询,如它内建的轻型的SQL扩展(HQL)、面向对象的条件API,或者使用原生的SQL语句等。一般像Hibernate这样的ORM框架都会提供比手写SQL更加优化的技术,如事务的控制(最后写进事务)、批量处理、第一/二级缓存。Hibernate基于开源许可协议发布,网址是http://hibernate.org。
Hibernate Search的全文搜索技术彻底基于Apache Lucene。而Lucene则是一个创建在Apache软件基金会(http://lucene.apache.org/java)的强大的全文搜索引擎库。它自发布以来迅速成为了Java语言中事实上的全文搜索技术标准。其成功的缘由以下:
■ 免费开源
■ 易用且强大的API
■ 它对于数据索引和搜索是不可知论的(注:agnostic,不可知论,http://zh.wikipedia.org/zh/不可知论)
■ 其性能和成熟度已经获得充分的证实
■ 和一个充满活力的社区
全部这些特质使得Lucene成为全文搜索解决方案中最好的资源库。这也就是为何Hibernate Search要构建在Lucene之上的缘由。
Hibernate Search一样是在开源协议下发布的,它是一座链接Lucene的特点功能和Hibernate世界的桥梁。Hibernate Search隐藏了部分低级和复杂的Lucene API,只提供必需的选项,以最少的工做来创建索引和检索Hibernate持久化模型。本章会让你较好的理解Hibernate Search是如何融入到Hibernate的编程模型中的,还介绍了如何快速上手使用Hibernate Search。
咱们会以一个DVD音像店程序来演示二者的整合。固然不会写出整个程序来,而是把焦点放在领域模型和核心架构上,尤为是搜索引擎方面。
咱们使用的对象模型很简单,只有一个‘Item’实体。Item表示一张DVD,咱们想让用户根据DVD的一些相关属性来开始搜索。本章你将学会如何构建Hibernate Search、如何将元数据转化为可用于全文搜索的实体,以及对存放在数据库中的数据进行索引并在系统中检索匹配的数据。
需求: Hibernate Search须要些什么
Hibernate Search是在Java 5上开发的所以须要至少在Java开发工具包(JDK)或Java运行环境(JRE)5以上的版本才能运行。抛开这个限制无论,Hibernate Search能够运行在任何Hibernate能够运行的环境下,。几乎没可能列举出全部的Hibernate和Hibernate Search可运行的环境,咱们仅列出其中比较典型的:
■ 部署在Java EE应用服务器中的程序(不管是不是Web程序)
■ Servlet容器中的简单Web程序
■ 使用JBoss Seam的Web应用
■ Swing程序
■ 所谓的轻量级依赖注入框架,如Spring、Guice、Web Beans
■ Java SE上的应用程序
■ 一些使用了Hibernate的框架或平台,如Grails