Compass
1. 概述
已加入Opensymphony的Compass 是对Lucene搜索引擎在企业应用(数据库相关应用)中的封装和增强。 Lucene本身的API已经非常简单,那Compass还能做什么样的增强呢?
心里数一下还是挺多的,不过可能只有一小部分适合自己的项目,在我的项目里最实际的增强就是索引的建立与Data Change Mirror的功能,其他功能用不用的上就要看缘分了。
1.1 参考资料
InfoQ:Compass: Integrate Search into your apps
1.2 What SpringSide Done
SpringSide在core中仿照Compass的Spring MVC Controller封装了SearchService与Advanced SearchService,方便不使用Spring MVC的同志
同时在书店示例中演示了图书搜索及结果关键字高亮,在Spring启动时建立索引并基于Hibernate event机制的自动索引更新。
2. Data Change Mirror功能
DataMirror会把数据库的增删改变化实时映射到索引文件中。
如果你采用Hibernate等ORM方案,Compass就会与Hibernate的event机制结合,或者使用AOP的方式,自动在数据库增删改时变更索引;如果你只是采用JDBC,也可以在XML文件配置Table Mapping或ResultSet Mapping,指定version列,Compasss定时对version列变化了的数据进行索引更新。
而且,Compass还支持事务,在查询数据库遍历结果集的过程中如果出现异常,会在Index Segments 文件一级进行事务控制。
如果没有Compass,我们一般会在每天深夜重建一次索引。相比Compass的做法,
一来反应迟缓,平均延时半天;
二来效率没有Compass高。如果采用完全重建索引,效率就不用说了。如果进行增量索引,就要增加一个字段,在数据更新时进行特殊的处理,删除时也不能直接删除数据,要等lucene删完索引数据才能删除,这样Lucene对应用就非常不透明了。
三来不支持事务,如果建立索引过程中出现异常,索引文件的状态是不可控的。
3. Compass 下简化的索引建立过程
在lucene 下建立索引的过程是自己用JDBC 跑.SQL 获得ResultSet,遍历ResultSet建立Document对象并用IndexWriter写入文件目录。
在Compass下就变成一个宣告的过程:
3.1 宣告待搜索的POJO
@SearchableId 宣告Document的id列;
@SearchableProperty 宣告要索引的field;
@SearchableComponent宣告关联其他对象如Category分类。
public class Product {
@SearchableId
private Integer id;
@SearchableProperty
private String name;
@SearchableComponent
private Category category;
}
3.2 定义CompassGps
CompassGps是Compass下用来建立索引,Mirror Data Change的类。
在ApplicationContext.xml定义了Compass与Spring的集成,配置参数,并让GPS随ApplicationContext启动开始监控Hibernate的DataChange :
- Compass:核心定义类,定义要搜索的POJO 和 索引存储的路径。
- CompassGPS: 定义使用了Hibernate3GPS,定义了init-method 和destory-method,会自动随ApplicaitonContext的启动,开始监控Hibernate的变化。
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<!-- anontaition式设置 -->
<property name="classMappings">
<list>
<value>org.springside.bookstore.model.Book</value>
<value>org.springside.bookstore.model.Category</value>
</list>
</property>
<property name="compassConfiguration">
<bean class="org.compass.annotations.config.CompassAnnotationsConfiguration"/>
</property>
<property name="compassSettings">
<props>
<prop key="compass.engine.connection">
file: </prop>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
</props>
</property>
<property name="transactionManager" ref="transactionManager"/>
</bean>
<!-- Compass中建立索引与mirror database change的部件 -->
<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"
init-method="start" destroy-method="stop">
<property name="compass" ref="compass"/>
<property name="gpsDevices">
<list>
<bean class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">
<property name="name" value="hibernateDevice"/>
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</list>
</property>
</bean>
只需要在AdvancedSearchCommand 上将需要highlighting 的Fields 加入即可。
searchCommand.setHighlightFields(new String[] {"name"});
4.2 定义高亮的样式
另外,如果对高亮显示的效果不满意的话,可以在applicationContext-compass.xml 文件里配置:
<prop key="compass.engine.highlighter.default.formatter.simple.pre">
<![CDATA[<font color="red"><b>]]>
</prop>
<prop key="compass.engine.highlighter.default.formatter.simple.post">
<![CDATA[</b></font>]]>
分享到:
相关推荐
【compass完整可用项目】是一个基于特定技术栈的软件开发项目,该项目的核心是Compass库,一个与Lucene紧密集成的全文搜索引擎工具。Compass提供了一种简单的方式来在Java应用程序中集成全文搜索功能,使得开发者...
MongoDB Compass是MongoDB官方提供的一款图形化管理工具,它为MongoDB数据库的使用者提供了直观的界面,方便进行数据浏览、查询、操作以及性能分析。MongoDB Compass 1.15.1是这个系列的一个版本,它无需安装,可以...
Compass是MongoDB的官方图形界面工具,它提供了一个用户友好的界面,用于可视化数据库和集合,帮助开发者和管理员进行数据探索、查询构建、性能分析以及基本的数据库管理。通过Compass,用户可以轻松地浏览和操作...
COMPASS 教程Pdf COMPASS 是一款专业的油气田设计和生产软件,主要用于油气田的规划、设计和生产过程。下面是 COMPASS 的一些重要知识点: 1. COMPASS WELLPLAN FOR WINDOWS 功能简介:COMPASS 的核心功能包括 ...
### Compass 使用详解 #### 一、Compass 概述 Compass 是一款开源的 Java 库,用于简化 Lucene 的使用。它通过提供类似于 Hibernate 的对象关系映射(ORM)功能,使得开发者能够更加轻松地将 Java 对象映射到 ...
MongoDB Compass是MongoDB公司开发的一款强大的图形用户界面(GUI)工具,专为MongoDB数据库管理系统设计。这个工具的主要目标是简化数据库的管理和操作,使非技术用户也能轻松理解和探索数据。"mongodb-compass-...
Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...
【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...
### Java搜索 Compass 资料知识点 #### 一、Compass 概述 Compass 是一个为 Java 应用程序提供全文检索功能的框架。它能够帮助开发者在 Java 应用程序中轻松实现复杂的搜索需求,并且具有较高的性能。Compass 基于...
**Compass:Lucene的高级封装工具** Compass是一款基于Apache Lucene的全文搜索引擎库,它为Java开发者提供了一个高级的、易于使用的搜索框架。在Java应用中集成搜索引擎功能时,Compass提供了一种简化的方式来管理...
MongoDB Compass是MongoDB官方提供的一款强大的图形化管理工具,专为MongoDB数据库设计,用于帮助用户更加直观地理解和操作数据库。在这个版本"mongodb官方客户端可视化工具compass-1.26.1-win32-x64"中,我们关注的...
罗氏Accu-Chek Compass软件是一款专为糖尿病患者设计的血糖管理工具,它能够帮助用户有效地跟踪和管理自己的血糖水平。这款软件的版本是V1.3.0.8,其简体中文完全汉化补丁是用户共享的成果,确保了中国用户能够无...
MongoDB Compass是MongoDB公司开发的一款强大的图形化管理工具,专为MongoDB数据库设计,用于帮助用户更加直观地理解和操作NoSQL数据库。本压缩包文件"mongodb-compass-1.17.0-win32-x64"包含了适用于Windows 32位和...
Compass 是一个全文搜索引擎库,它是对 Lucene 的封装,为 Java 应用提供了一种简单易用的接口。在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的...
在“mongodb-compass-community-1.16.4-win32-x64.zip”这个压缩包中,包含了MongoDB Compass的社区版,它可以帮助用户直观地查看和操作MongoDB数据库。以下是压缩包内各个文件的作用: 1. **snapshot_blob.bin**:...
基于Lucene的Compass框架详解-Java 一、Compass框架概述 Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如...
Compass 2.2.0 是一个开源的Java搜索引擎框架,它的出现是为了简化与Apache Lucene的交互,为开发者提供了一种更为高级和抽象的API。Lucene是Apache软件基金会的一个项目,它是一个高性能、全文本搜索库,但是直接...
### Sass与Compass实战知识点详解 #### 一、Sass简介 Sass(Syntactically Awesome Style Sheets)是一种预处理器脚本语言,用于扩展CSS的功能。它为CSS增加了诸如变量、嵌套规则、混合器(mixins)、继承、函数等...
Compass是一个基于Sass的CSS预处理器框架,它极大地扩展了CSS的功能,使得开发者能够更加高效、优雅地编写样式表。下面将详细讲解Compass的基本概念、安装过程、主要功能以及如何通过它来构建入门级的网页项目。 一...