`
jetway
  • 浏览: 483708 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Compass

    博客分类:
  • java
阅读更多

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://${user.home}/springside/compass
			</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完整可用项目】是一个基于特定技术栈的软件开发项目,该项目的核心是Compass库,一个与Lucene紧密集成的全文搜索引擎工具。Compass提供了一种简单的方式来在Java应用程序中集成全文搜索功能,使得开发者...

    mongodb compass1.15.1官网版 免安装直接使用

    MongoDB Compass是MongoDB官方提供的一款图形化管理工具,它为MongoDB数据库的使用者提供了直观的界面,方便进行数据浏览、查询、操作以及性能分析。MongoDB Compass 1.15.1是这个系列的一个版本,它无需安装,可以...

    mongodb安装包和compass

    Compass是MongoDB的官方图形界面工具,它提供了一个用户友好的界面,用于可视化数据库和集合,帮助开发者和管理员进行数据探索、查询构建、性能分析以及基本的数据库管理。通过Compass,用户可以轻松地浏览和操作...

    compass教程.pdf

    COMPASS 教程Pdf COMPASS 是一款专业的油气田设计和生产软件,主要用于油气田的规划、设计和生产过程。下面是 COMPASS 的一些重要知识点: 1. COMPASS WELLPLAN FOR WINDOWS 功能简介:COMPASS 的核心功能包括 ...

    compass_使用详解.pdf compass_教程 compass_试用案例

    ### Compass 使用详解 #### 一、Compass 概述 Compass 是一款开源的 Java 库,用于简化 Lucene 的使用。它通过提供类似于 Hibernate 的对象关系映射(ORM)功能,使得开发者能够更加轻松地将 Java 对象映射到 ...

    mongodb-compass-1.27.1-win32-x64.zip

    MongoDB Compass是MongoDB公司开发的一款强大的图形用户界面(GUI)工具,专为MongoDB数据库管理系统设计。这个工具的主要目标是简化数据库的管理和操作,使非技术用户也能轻松理解和探索数据。"mongodb-compass-...

    compass搜索引擎技术

    Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...

    Compass原理深入学习笔记

    【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...

    java搜索 compass资料

    ### Java搜索 Compass 资料知识点 #### 一、Compass 概述 Compass 是一个为 Java 应用程序提供全文检索功能的框架。它能够帮助开发者在 Java 应用程序中轻松实现复杂的搜索需求,并且具有较高的性能。Compass 基于...

    Compass 的java代码

    **Compass:Lucene的高级封装工具** Compass是一款基于Apache Lucene的全文搜索引擎库,它为Java开发者提供了一个高级的、易于使用的搜索框架。在Java应用中集成搜索引擎功能时,Compass提供了一种简化的方式来管理...

    mongodb官方客户端可视化工具compass-1.26.1-win32-x64

    MongoDB Compass是MongoDB官方提供的一款强大的图形化管理工具,专为MongoDB数据库设计,用于帮助用户更加直观地理解和操作数据库。在这个版本"mongodb官方客户端可视化工具compass-1.26.1-win32-x64"中,我们关注的...

    罗氏Accu-Chek Compass软件简体中文完全汉化补丁

    罗氏Accu-Chek Compass软件是一款专为糖尿病患者设计的血糖管理工具,它能够帮助用户有效地跟踪和管理自己的血糖水平。这款软件的版本是V1.3.0.8,其简体中文完全汉化补丁是用户共享的成果,确保了中国用户能够无...

    mongodb-compass-1.17.0-win32-x64 MongoDB可视化工具Compass

    MongoDB Compass是MongoDB公司开发的一款强大的图形化管理工具,专为MongoDB数据库设计,用于帮助用户更加直观地理解和操作NoSQL数据库。本压缩包文件"mongodb-compass-1.17.0-win32-x64"包含了适用于Windows 32位和...

    compass annotation关联关系

    Compass 是一个全文搜索引擎库,它是对 Lucene 的封装,为 Java 应用提供了一种简单易用的接口。在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的...

    mongodb-compass-community-1.16.4-win32-x64.zip

    在“mongodb-compass-community-1.16.4-win32-x64.zip”这个压缩包中,包含了MongoDB Compass的社区版,它可以帮助用户直观地查看和操作MongoDB数据库。以下是压缩包内各个文件的作用: 1. **snapshot_blob.bin**:...

    基于Luncene的compass框架详解-java

    基于Lucene的Compass框架详解-Java 一、Compass框架概述 Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如...

    compass-2.2.0.zip

    Compass 2.2.0 是一个开源的Java搜索引擎框架,它的出现是为了简化与Apache Lucene的交互,为开发者提供了一种更为高级和抽象的API。Lucene是Apache软件基金会的一个项目,它是一个高性能、全文本搜索库,但是直接...

    Sass和Compass 实战

    ### Sass与Compass实战知识点详解 #### 一、Sass简介 Sass(Syntactically Awesome Style Sheets)是一种预处理器脚本语言,用于扩展CSS的功能。它为CSS增加了诸如变量、嵌套规则、混合器(mixins)、继承、函数等...

    compass的几个入门网页

    Compass是一个基于Sass的CSS预处理器框架,它极大地扩展了CSS的功能,使得开发者能够更加高效、优雅地编写样式表。下面将详细讲解Compass的基本概念、安装过程、主要功能以及如何通过它来构建入门级的网页项目。 一...

Global site tag (gtag.js) - Google Analytics