`

《compass-reference》翻译计划之:1.1概述和1.2所涉及技术

阅读更多

1.1. 概述

 

 

Compass为应用集成搜索引擎功能提供了比较周全的考虑。下面的图展现了Compass不同的模块,随后对它们进行了一些简要的描述。

 

 

Compass概述

 

Compass CoreCompass最基本的部分。它有对Lucene的扩展API:其中包含了事务级索引、搜索引擎抽象和ORM,还有事务管理集成,以及不同的映射方式(OSEM, XSEMRSEM)等等。Compass Core的目标是可以适用在不同的情景和环境下,并简化核心操作,方便使用。

 

Compass Gps的目标是为了整合不同的数据源。其中主要的一个特性就是整合各种ORM框架(Hibernate, JPA, JDO, OJB),可以让搜索引擎和ORM内容视图之间透明化集成。另外还包括JDBC的集成,允许索引数据库的内容——用户就可以通过配置SQL表达式的方式来提取该内容。

 

Compass SpringCompass中集成了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的新特性是非常有必要的。ResourceCompassLucene Document上的一个抽象,而PropertyCompassLucene Field上的一个抽象。两者并没有在Lucene的实现上加太多东西,除Resource多加了一个Alias以外。想了解更多的信息,请阅读第5章:搜索引擎。

 

RSEM - Resource/Search Engine Mapping

RSEM-资源/搜索引擎映射

 

ResourceCompass中最底层的数据对象,可以使用不同的映射技术来连接它们。Compass使用的一种底层映射机制称为RSEM(资源/搜索引擎映射),这种机制允许说明性的定义资源映射的精确度。RSEM适合已经使用Lucene的现有系统(能最小限度地升级到Compass中),或者一个没有丰富的领域模型(对象或者XML)的应用。

 

 

另外,一个基于Compass转换框架的特性:一个Property值不能肯定就是一个字符串(正如LuceneField)。对象也能被当成一个值,不管是默认的还是指定的转换。想了解更多内容,请阅读第8章:RSEM-资源/搜索引擎映射。

 

简单API

Compass拥有一套非常简单的API。如果你有使用过一个ORM工具(HibernateJPA等)的经验,你在用Compass API时会感觉非常舒适(习惯使然)。同样,Lucene有三个主类:IndexReaderSearcherIndexWriter。对于那些没有使用过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》翻译计划”

 

 

7
1
分享到:
评论
3 楼 renlei413326889 2012-07-20  
快速升级 -->应该是快速更新吧
2 楼 liushilin2008 2008-11-14  
期望看到其它章节的汉语参考
1 楼 liushilin2008 2008-11-14  
谢谢啦

相关推荐

Global site tag (gtag.js) - Google Analytics