《compass-reference》翻译计划之:1.1概述和1.2所涉及技术
1.1. 概述
?
?
Compass为应用集成搜索引擎功能提供了比较周全的考虑。下面的图展现了Compass不同的模块,随后对它们进行了一些简要的描述。
?
?
Compass概述
?
Compass Core是Compass最基本的部分。它有对Lucene的扩展API:其中包含了事务级索引、搜索引擎抽象和ORM,还有事务管理集成,以及不同的映射方式(OSEM, XSEM和RSEM)等等。Compass Core的目标是可以适用在不同的情景和环境下,并简化核心操作,方便使用。
?
Compass Gps的目标是为了整合不同的数据源。其中主要的一个特性就是整合各种ORM框架(Hibernate, JPA, JDO, OJB),可以让搜索引擎和ORM内容视图之间透明化集成。另外还包括JDBC的集成,允许索引数据库的内容——用户就可以通过配置SQL表达式的方式来提取该内容。
?
Compass Spring即Compass中集成了Spring框架。Spring,作为一个易于使用的应用框架,提供了一个简单的开发模式(基于依赖注入等)。Compass集成Spring的方式,类似于ORM框架近乎无缝地集成到Spring中——用户感觉就像在使用Spring自己提供的持久功能。Compass还集成了Spring的事务抽象层、AOP支持和MVC库。
?
?
1.2. 所涉及技术
?
接下来对Compass所涉及到的一些技术进行一些简要的介绍:
?
1.2.1. Lucene
直接使用Lucene
?
在Compass中,允许用户直接使用大部分的Lucene类。如果你的应用中有自己专门的查询器,分析器或者过滤器,你也能够在Compass直接使用它们。Compass有它自己的索引结构,索引可以划分成子索引,每个子索引都是一个完全功能意义上的Lucene索引。
?
搜索引擎抽象
Compass提供了一个搜索引擎的抽象,具体的实现都是基于Lucene的。Lucene是一个令人惊异的、快速的和稳定的搜索引擎(或IR库),现在的问题在于我们在应用中整合Lucene只能使用其底层的用法和API。
?
对于使用过或了解Lucene的人,介绍Compass的新特性是非常有必要的。Resource是Compass在Lucene Document上的一个抽象,而Property是Compass在Lucene Field上的一个抽象。两者并没有在Lucene的实现上加太多东西,除Resource多加了一个Alias以外。想了解更多的信息,请阅读第5章:搜索引擎。
?
RSEM - Resource/Search Engine Mapping
RSEM-资源/搜索引擎映射
?
Resource是Compass中最底层的数据对象,可以使用不同的映射技术来连接它们。Compass使用的一种底层映射机制称为RSEM(资源/搜索引擎映射),这种机制允许说明性的定义资源映射的精确度。RSEM适合已经使用Lucene的现有系统(能最小限度地升级到Compass中),或者一个没有丰富的领域模型(对象或者XML)的应用。
?
?
另外,一个基于Compass转换框架的特性:一个Property值不能肯定就是一个字符串(正如Lucene的Field)。对象也能被当成一个值,不管是默认的还是指定的转换。想了解更多内容,请阅读第8章:RSEM-资源/搜索引擎映射。
?
简单API
Compass拥有一套非常简单的API。如果你有使用过一个ORM工具(Hibernate,JPA等)的经验,你在用Compass API时会感觉非常舒适(习惯使然)。同样,Lucene有三个主类:IndexReader,Searcher和IndexWriter。对于那些没有使用过Lucene的人来说,要了解Lucene索引机制是一件很困难的事情。Compass提供了一个单一的接口,包含了所有相关的操作。这样,使用者就从那些繁琐的底层操作中解脱了出来。想了解更多的内容,请阅读第2章:介绍,第11章:与对象共舞。
?
事务级索引与整合
Lucene是非事务的。当试图将Lucene跟其他事务级的资源(如数据库和消息)进行整合时,会产生一些问题。Compass支持两阶段提交事务(读提交和序列化),这是建立在Lucene索引的分割基础上的。该实现提供了快速的提交(比Lucene更快)——因为Compass对此进行了最优化。想了解更多的内容,请阅读5.6:事务,5.9:最优化。
?
在支持事务级索引的基础上,Compass集合了不同的事务管理(如JTA),而且自身也提供了一个。想了解更多的内容,请阅读第10章:事务。
?
快速升级
在Lucene中,为了升级,你不得不先删除老的Document,再创建一个新的Document。这本身是件很麻烦的事,尤其是你需要通过两个不同的接口完成删除(IndexReader)和创建(IndexWriter)操作。感谢Compass提供了事务级索引。事实上,在Compass中每一个Resource都有唯一标识(通过映射定义),你能很简单、快捷的完成更新操作(通过save来实现)。
?
?“All”支持
使用Lucene时,是不会搜索存储在Document中所有域的。它创建了一个综合的域,即提供一个“all”域,使得查询索引时可以使用它。Compass也为你提供了“all”支持,在默认的情况下,将创建“all”域并让其担当搜索的默认域。当然,你可以通过配置使“all”域屏蔽或者激活,也可修改它的名字,或者是否让它担当搜索的默认域。另外,也可以从所有的属性中排除其中确定的几个属性映射。
?
索引片断
当构建一个Lucene使能应用,有时(性能原因)索引需要分割成几个部分。Compass将自动把索引分片成多个子索引——采用的是一个可配置的子索引的散列函数,它允许散列不同的搜索对象(Resource,映射对象或者XML对象)到子索引中。想了解更多的内容,请阅读5.5:索引结构。
?
------------------------------------------------------------
?
?
注:“《compass-reference》翻译计划”
?
?
1 楼 liushilin2008 2008-11-14 谢谢啦