`
neptune
  • 浏览: 362150 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

compass 简单教程

阅读更多
引用URL
http://wiki.springside.org.cn/display/springside/Compass

内容:
版权声明:本文作者 江南白衣,Scheweigen(springside保留版权,转载请注明出处:http://wiki.springside.org.cn/display/springside/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>]]>
    </prop>

分享到:
评论
3 楼 wangwenjunHi 2010-01-18  
文章写的很弱!几乎说明不了什么!可能LZ是给自己看的
2 楼 dkm123456 2008-11-20  
最近在研究compass ,遇到个问题:clob和blob 类型的字段处理不了,要怎么弄啊,解决办法发我邮箱  dkm123456@126.com   谢过先
1 楼 y_liu001 2008-09-26  
太笼统了点吧!

相关推荐

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

    与传统的 Lucene 相比,Compass 提供了更高级别的抽象和更简单的 API,从而降低了开发难度。 #### 二、Compass 与 Lucene 和 Hibernate 的关系 ##### 2.1 Lucene 简介 - **Lucene** 是一个高性能的全文检索引擎库...

    使用compass+lucene实现简单的全文检索功能

    在提供的文件列表中,`2008822111624.chm` 是一个帮助文件,可能包含了 Compass 和 Lucene 的详细使用教程或者 API 参考。为了深入学习和实践,你可以查阅这个 CHM 文件,了解更多的细节和示例代码。 总的来说,...

    compass2简单例子

    标题 "compass2简单例子" 指向的是一个关于 Compass 的使用教程,Compass 是一个基于 Sass 的 CSS 预处理器。它简化了编写复杂的 CSS3 规则,并提供了易于管理的项目结构。这个简单的例子可能包括如何设置 Compass、...

    compass的几个入门网页

    3. 实践创建简单项目,应用Compass的功能来编写样式。 4. 阅读官方文档和在线教程,加深理解。 5. 参考其他开发者的工作,了解如何在实际项目中使用Compass。 总之,Compass为Web开发者提供了一个强大的工具,通过...

    效率源Data Compass 热交换快速提取指定数据的数据恢复教程.doc

    该教程主要针对以下几种故障:简单故障,如分区丢失、文件丢失破坏、病毒破坏、误格式化、误删除、误克隆;复杂故障,如硬盘固件区物理坏道、硬盘固件区严重问题、硬盘扇区有严重的物理坏道、硬盘磁头彻底损坏、硬盘...

    tracevizlab:Trace Compass的跟踪可视化教程

    或者可以简单地阅读它,在这种情况下,可以跳过实验室中描述快捷方式和导航选项的某些部分。 这些部分包含在 :red_triangle_pointed_down: 和 :red_triangle_pointed_up: 迹象。 目标 了解什么是跟踪以及何时可以...

    compass_hibernate_spring3.zip

    1. **Compass 搜索引擎**:Compass 提供了一个简单的 API,使得对象可以直接被索引和搜索,无需处理底层的 Lucene 细节。它可以与 Hibernate 自动集成,将 ORM 实体自动转换为搜索索引。 2. **Hibernate ORM**:...

    compass:我们走吧

    6. **学习资源**:为了更好地理解和使用Compass,开发者可以参考Compass的官方文档,以及社区中的教程和示例项目。 综上所述,Compass是PHP开发者进行前端开发的强大工具,它借助Sass的威力,让CSS编写变得更为高效...

    SSH2+compass2.2搜索实例(完整工程)

    Compass是一个全文搜索引擎库,它是Lucene的包装器,使得在Java应用程序中集成搜索引擎变得简单。Compass2.2引入了对Spring的深度集成,可以无缝地与Hibernate配合工作,实现实时索引和检索。它使得在应用程序中添加...

    TEQC教程:对静态数据进行质量分析和编辑

    TEQC软件能够简单实用地反映GPS数据质量和GPS接收机的性能,因此常被包括国际GPS服务(IGS)在内的GPS用户用于数据分析、编辑或对接收机进行测试。研究TEQC软件对于提高数据处理的可靠性和实用性具有重要的意义。 ...

    app-compass:使用Xamarin.Forms和Xamarin.Essentials创建一个简单的指南针应用程序

    本教程将深入探讨如何利用这两个工具创建一个简单的指南针应用程序。 首先,我们需要了解**Xamarin.Forms**。这是一个UI工具包,它允许开发者使用单一的、声明性的UI语法来设计应用程序的界面。Xamarin.Forms通过...

    CloudCompare工具

    CloudCompare工具,可用于点云去噪,简化,平面提取,三维建模等,是一个非常好的处理点云数据的开源工具,有个不错的框架,软件操作简单,很多公司对该工具进行二次开发以满足公司需要。第一次使用CloudCompare感觉...

    B4A初级教程

    - **创建图形指南针(Create the graphic Compass)**: 指导如何设计和实现一个简单的指南针UI。 - **创建GPS(Create the GPS)**: 展示如何利用Android设备内置的GPS传感器来获取位置信息。 - **GPS位置更改...

    安卓(Android)程序开发初级教程技术文档【视频+教程+源码】

    网上发行的一个资料很适合初学者,安卓经典Android开发入门教程,有实例,有android开发视频教程,还附带源码,欢迎各位下载... Android for eclipse plug in 在安装过程很简单,通过网络安装插件就可以了,这个是 URL

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    solr从入门到精通教程

    - 企业搜索引擎方案选型:主要比较了基于Lucene封装、调用第三方搜索引擎API和基于Compass+Lucene三种方案的优劣。 - Solr的特性:描述了Solr是基于Lucene的搜索引擎,并对其扩展性进行了说明;包括Solr的Schema模式...

    Lucene 3.0完成入门

    本篇文章将围绕 Lucene 3.0 版本,详细介绍其入门知识,并通过提供的文档列表,帮助你深入了解并实现简单的搜索功能。 1. **Lucene 3.0 的基础概念** - **索引**:Lucene 的核心是索引,它是一种预处理步骤,将...

    Android程序开发初级教程(一)开始HelloAndroid.pdf

    【Android程序开发初级教程(一)开始HelloAndroid.pdf】这篇文档是...通过这个简单的“Hello, World”程序,开发者将开始掌握Android Studio的使用、理解Android应用的基本结构和生命周期,以及如何与用户界面进行交互。

    安卓开发初级教程.pdf

    9. **Camera, GPS, compass, and accelerometer**:硬件相关,支持拍照、定位、方向感应和加速度感应。 10. **Rich Development Environment(丰富开发环境)**:包含Eclipse IDE的Android Development Tools插件,...

Global site tag (gtag.js) - Google Analytics