引用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>
分享到:
相关推荐
非常好用,功能多的Unity小地图、雷达插件,适用于2017、2018、2019等多个版本, 使用操作简单方便
该教程主要针对以下几种故障:简单故障,如分区丢失、文件丢失破坏、病毒破坏、误格式化、误删除、误克隆;复杂故障,如硬盘固件区物理坏道、硬盘固件区严重问题、硬盘扇区有严重的物理坏道、硬盘磁头彻底损坏、硬盘...
或者可以简单地阅读它,在这种情况下,可以跳过实验室中描述快捷方式和导航选项的某些部分。 这些部分包含在 :red_triangle_pointed_down: 和 :red_triangle_pointed_up: 迹象。 目标 了解什么是跟踪以及何时可以...
网上发行的一个资料很适合初学者,安卓经典Android开发入门教程,有实例,有android开发视频教程,还附带源码,欢迎各位下载... Android for eclipse plug in 在安装过程很简单,通过网络安装插件就可以了,这个是 URL
CloudCompare工具,可用于点云去噪,简化,平面提取,三维建模等,是一个非常好的处理点云数据的开源工具,有个不错的框架,软件操作简单,很多公司对该工具进行二次开发以满足公司需要。第一次使用CloudCompare感觉...
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...
matlab最简单的代码目标: 您需要实施模拟退火(SA),遗传算法(GA)和禁忌搜索(TS)算法来解决美国的48个大写字母(ATT48)旅行商问题(TSP)。 在(Science)上可以找到原始的《模拟退火》论文。 有关禁忌搜索的...
纯 CSS - 平行公园纯 CSS - 平行公园是关于如何完善平行公园的分步教程。 或在上喜欢它。依赖要从 sass 代码生成 css 文件,您只需要指南针。 如果没有,运行项目要编译 sass 项目,请使用compass compile 。 要查看...
从SASS到CSS的自动编译(在开发过程... 然后,在那里站了2-3个小时之后,观看一些有关如何使用Composer的教程,这些教程现在非常简单,并且是PHP开发中常见的最低标准。 请注意,这是一个require-dev ,不是正常的req
bootstrap 的学习非常简单,并且它所提供的样式又非常精美。...这是 Bootstrap 从 Less 到 Sass 的源码移植项目,用于快速地在 Rails、Compass 或 只针对 Sass 的项目中引入。 其实我们不用下
目录选项故障排除变更日志路线图模块贡献基本尖端背景执照 先决条件新产品经理罗盘npm install -g grunt-contrib-compass Ruby宝石安装指南针您应该为每个路径设置一条路径: which ruby && which compass 教程您...
libsnark教程在这个库中,我们将使用创建一个简单的zkSNARK应用程序,这是一个用于zkSNARK证明的C ++库。 zkSNARKs使证明者可以简洁地说服任何验证者对给定语句的有效性,而无需透露除语句有效性以外的任何信息。 这...
Next.js之前用过一次,这次是重新做个小回顾,现在最新版本已经到了9.5.3,有些API也同以前有点不同了,网上大部分教程也都是旧版本v7的比较多,故打算写下简单的教程,绝对详细的带你入个小门。 库版本 本文案例用...
您将逐步创建一个简单的TODO列表应用程序,其中包括对不同用户帐户的支持。 我的最终产品在这里可见: : ,使用Meteor的免费托管。 有一个样本用户(测试,密码:password)可用于基本功能测试。
该入门指南包含内容类型和配置,以使您可以通过一个简单的博客开始运行。 特征 2种馆藏类型:文章,类别 2创建的文章 2创建的类别 文章和类别的权限设置为true 入门 克隆存储库并安装依赖项: git clone ...
关于以源图形引擎opencascade为底层的应用,对初学者有个对occ的了解。
此回购包括我一直在做的一些教程中的代码,感觉很简单,可以下载代码并将其用于您的项目中。
V搜——一个简单的 Pandownload 搜索插件 步骤繁琐,懒人请绕道 当前版本:0.0.3 更新时间:2020年4月9日18:23:10 下载地址 (右键“网页另存为”或复制链接,使用迅雷下载) 使用方法 按照申请 小葱计算 API ,获取...
谷歌 Chrome 开发工具教程 ...在你继续本教程之前,你必须对简单的术语有一定的了解,比如源码,文档等等。因为在你的组织下处理各级软件项目,如果你有软件工作的知识在软件开发和软件测试流程那是最好的。
一个简单的Python脚本,可以帮助您续订免费的EUserv IPv6 VPS。 该脚本可以自动检查您帐户中的VPS金额,并可以更新VPS。 此存储库未提供任何可帮助您在GitHub Action或其他类似Serverless / Cloud Function上运行...