- 浏览: 851518 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。依靠顶级的Lucene搜索引擎,Compass 结合了,像 Hibernate和 Sprin的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化. Compass的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷。
这里struts2整合spring、hibernate就不说了。贴出compass+spring+hibernate整合的关键代码。
1、对要检索的实体进行可搜索注解:
Java代码
@Searchable
public class Product implements java.io.Serializable {
@SearchableId
private Integer id;
@SearchableProperty(name="name")
private String name;
@SearchableProperty(name="price")
private Float price;
@SearchableProperty(name="brand")
private String brand;
@SearchableProperty(name="description")
private String description;
//getter setter
}
java代码
package cn.changtusoft.s2sh_compass.service.impl;
import org.compass.gps.CompassGps;
import org.springframework.beans.factory.InitializingBean;
/**
* 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.
* 会启动后延时数秒新开线程调用compassGps.index()函数.
* 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.
* 也可以不用本Builder, 编写手动调用compassGps.index()的代码.
*
*/
public class CompassIndexBuilder implements InitializingBean {
// 是否需要建立索引,可被设置为false使本Builder失效.
private boolean buildIndex = false;
// 索引操作线程延时启动的时间,单位为秒
private int lazyTime = 10;
// Compass封装
private CompassGps compassGps;
// 索引线程
private Thread indexThread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(lazyTime * 1000);
System.out.println("begin compass index...");
long beginTime = System.currentTimeMillis();
// 重建索引.
// 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,
// 索引完成后再进行覆盖.
compassGps.index();
long costTime = System.currentTimeMillis() - beginTime;
System.out.println("compss index finished.");
System.out.println("costed " + costTime + " milliseconds");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
/**
* 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.
*
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception {
if (buildIndex) {
indexThread.setDaemon(true);
indexThread.setName("Compass Indexer");
indexThread.start();
}
}
public void setBuildIndex(boolean buildIndex) {
this.buildIndex = buildIndex;
}
public void setLazyTime(int lazyTime) {
this.lazyTime = lazyTime;
}
public void setCompassGps(CompassGps compassGps) {
this.compassGps = compassGps;
}
}
3、Manager
Java代码
package cn.changtusoft.s2sh_compass.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.compass.core.Compass;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.core.CompassTemplate;
import org.compass.core.CompassTransaction;
import cn.changtusoft.s2sh_compass.dao.ProductDao;
import cn.changtusoft.s2sh_compass.model.Product;
import cn.changtusoft.s2sh_compass.service.ProductManager;
public class ProductManagerImpl implements ProductManager {
private ProductDao productDao;
private CompassTemplate compassTemplate;
@Override
public List searchProducts(String description) {
List productList = new ArrayList();
Compass compass = compassTemplate.getCompass();
CompassSession session = compass.openSession();
CompassTransaction tx = null;
tx = session.beginTransaction();
CompassHits hits = session.queryBuilder().queryString("brand:"+description).toQuery().hits();
for (int i = 0; i < hits.length(); i++) {
Product p = (Product)hits.data(i);
productList.add(p);
}
tx.commit();
return productList;
}
/* setter */
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public void setCompassTemplate(CompassTemplate compassTemplate) {
this.compassTemplate = compassTemplate;
}
}
4、compass配置applicationContext-compass.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-lazy-init="true">
<bean id="annotationConfiguration"
class="org.compass.annotations.config.CompassAnnotationsConfiguration">
</bean>
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<property name="resourceDirectoryLocations">
<list>
<value>classpath:cn/changtusoft</value>
</list>
</property>
<property name="connection">
<value>/lucene/indexes</value>
</property>
<property name="classMappings">
<list>
<value>cn.changtusoft.s2sh_compass.model.Product</value>
</list>
</property>
<property name="compassConfiguration"
ref="annotationConfiguration" />
<property name="compassSettings">
<props>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
<prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>
</props>
</property>
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="hibernateGpsDevice"
class="org.compass.gps.device.hibernate.HibernateGpsDevice">
<property name="name">
<value>hibernateDevice</value>
</property>
<property name="sessionFactory" ref="sessionFactory" />
<property name="mirrorDataChanges">
<value>true</value>
</property>
</bean>
<!-- 同步更新索引 -->
<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.SpringSyncTransactionGpsDeviceWrapper">
<property name="gpsDevice" ref="hibernateGpsDevice" />
</bean>
</list>
</property>
</bean>
<bean id="compassTemplate"
class="org.compass.core.CompassTemplate">
<property name="compass" ref="compass" />
</bean>
<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
<bean id="compassIndexBuilder"
class="cn.changtusoft.s2sh_compass.service.impl.CompassIndexBuilder"
lazy-init="false">
<property name="compassGps" ref="compassGps" />
<property name="buildIndex" value="true" />
<property name="lazyTime" value="10" />
</bean>
</beans>
5、因为本实例使用的是庖丁分词,所以添加它的配置文件到src下(paoding-dic-home.properties)
Java代码
paoding.dic.home=c:/paoding/dic
paoding.dic.detector.interval=60
paoding.dic.home=c:/paoding/dicpaoding.dic.detector.
这里struts2整合spring、hibernate就不说了。贴出compass+spring+hibernate整合的关键代码。
1、对要检索的实体进行可搜索注解:
Java代码
@Searchable
public class Product implements java.io.Serializable {
@SearchableId
private Integer id;
@SearchableProperty(name="name")
private String name;
@SearchableProperty(name="price")
private Float price;
@SearchableProperty(name="brand")
private String brand;
@SearchableProperty(name="description")
private String description;
//getter setter
}
java代码
package cn.changtusoft.s2sh_compass.service.impl;
import org.compass.gps.CompassGps;
import org.springframework.beans.factory.InitializingBean;
/**
* 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.
* 会启动后延时数秒新开线程调用compassGps.index()函数.
* 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.
* 也可以不用本Builder, 编写手动调用compassGps.index()的代码.
*
*/
public class CompassIndexBuilder implements InitializingBean {
// 是否需要建立索引,可被设置为false使本Builder失效.
private boolean buildIndex = false;
// 索引操作线程延时启动的时间,单位为秒
private int lazyTime = 10;
// Compass封装
private CompassGps compassGps;
// 索引线程
private Thread indexThread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(lazyTime * 1000);
System.out.println("begin compass index...");
long beginTime = System.currentTimeMillis();
// 重建索引.
// 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,
// 索引完成后再进行覆盖.
compassGps.index();
long costTime = System.currentTimeMillis() - beginTime;
System.out.println("compss index finished.");
System.out.println("costed " + costTime + " milliseconds");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
/**
* 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.
*
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception {
if (buildIndex) {
indexThread.setDaemon(true);
indexThread.setName("Compass Indexer");
indexThread.start();
}
}
public void setBuildIndex(boolean buildIndex) {
this.buildIndex = buildIndex;
}
public void setLazyTime(int lazyTime) {
this.lazyTime = lazyTime;
}
public void setCompassGps(CompassGps compassGps) {
this.compassGps = compassGps;
}
}
3、Manager
Java代码
package cn.changtusoft.s2sh_compass.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.compass.core.Compass;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.core.CompassTemplate;
import org.compass.core.CompassTransaction;
import cn.changtusoft.s2sh_compass.dao.ProductDao;
import cn.changtusoft.s2sh_compass.model.Product;
import cn.changtusoft.s2sh_compass.service.ProductManager;
public class ProductManagerImpl implements ProductManager {
private ProductDao productDao;
private CompassTemplate compassTemplate;
@Override
public List searchProducts(String description) {
List productList = new ArrayList();
Compass compass = compassTemplate.getCompass();
CompassSession session = compass.openSession();
CompassTransaction tx = null;
tx = session.beginTransaction();
CompassHits hits = session.queryBuilder().queryString("brand:"+description).toQuery().hits();
for (int i = 0; i < hits.length(); i++) {
Product p = (Product)hits.data(i);
productList.add(p);
}
tx.commit();
return productList;
}
/* setter */
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public void setCompassTemplate(CompassTemplate compassTemplate) {
this.compassTemplate = compassTemplate;
}
}
4、compass配置applicationContext-compass.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-lazy-init="true">
<bean id="annotationConfiguration"
class="org.compass.annotations.config.CompassAnnotationsConfiguration">
</bean>
<bean id="compass" class="org.compass.spring.LocalCompassBean">
<property name="resourceDirectoryLocations">
<list>
<value>classpath:cn/changtusoft</value>
</list>
</property>
<property name="connection">
<value>/lucene/indexes</value>
</property>
<property name="classMappings">
<list>
<value>cn.changtusoft.s2sh_compass.model.Product</value>
</list>
</property>
<property name="compassConfiguration"
ref="annotationConfiguration" />
<property name="compassSettings">
<props>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
<prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>
</props>
</property>
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="hibernateGpsDevice"
class="org.compass.gps.device.hibernate.HibernateGpsDevice">
<property name="name">
<value>hibernateDevice</value>
</property>
<property name="sessionFactory" ref="sessionFactory" />
<property name="mirrorDataChanges">
<value>true</value>
</property>
</bean>
<!-- 同步更新索引 -->
<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.SpringSyncTransactionGpsDeviceWrapper">
<property name="gpsDevice" ref="hibernateGpsDevice" />
</bean>
</list>
</property>
</bean>
<bean id="compassTemplate"
class="org.compass.core.CompassTemplate">
<property name="compass" ref="compass" />
</bean>
<!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->
<bean id="compassIndexBuilder"
class="cn.changtusoft.s2sh_compass.service.impl.CompassIndexBuilder"
lazy-init="false">
<property name="compassGps" ref="compassGps" />
<property name="buildIndex" value="true" />
<property name="lazyTime" value="10" />
</bean>
</beans>
5、因为本实例使用的是庖丁分词,所以添加它的配置文件到src下(paoding-dic-home.properties)
Java代码
paoding.dic.home=c:/paoding/dic
paoding.dic.detector.interval=60
paoding.dic.home=c:/paoding/dicpaoding.dic.detector.
发表评论
-
solr第一弹 autocomplete(自动补全)
2012-09-22 16:38 1464百度和google中都有 ... -
Compass将lucene、Spring、Hibernate三者结合
2012-09-01 10:29 1784Java代码 1.概述 Compass将 ... -
lucene3.0学习笔记之异常集锦(1)
2012-08-28 11:08 1122luceneJavaApachethread ... -
lucene3.0学习笔记(三)与paoding整合
2012-08-28 11:07 1213luceneApache.net 试过lucen ... -
lucene3.0学习笔记(二)index
2012-08-28 11:07 1011luceneApacheF# 1。IndexWr ... -
lucene3.0学习笔记(一)
2012-08-28 11:06 796luceneApacheCGIBlog工作 首先 ... -
Compass技术文档
2012-06-24 15:15 4326目录 一、原理描述:... 二、术语解释:... 三 ... -
Compass2.2 学习笔记
2012-06-20 17:37 1290分类: 检索搜索 2012-01-10 20:49 36人阅 ... -
给你的网站加上站内搜索---Compass入门教程
2012-06-15 08:32 7210给你的网站加上站内搜索---Compass入门教程 ... -
COMPASS+spring 构建自己的搜索引擎
2012-06-12 13:06 1400在新架构中打算选择Compass或Hibernate Sear ...
相关推荐
在"struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现"这个项目中,首先你需要配置Struts2、Spring和Hibernate,确保它们能正常工作。这包括编写相应的配置文件(如struts.xml、spring-context.xml、...
struts2+spring3+hibernate3+compass实现全文检索功能,希望对初学者有所帮助!
在这个框架中,Spring作为核心的依赖注入(DI)和面向切面编程(AOP)容器,Hibernate是用于对象关系映射(ORM)的库,Struts2则作为MVC(模型-视图-控制器)架构的框架,而Compass2.1则是用于全文搜索引擎的工具。...
在本项目中,开发者利用SSH2(即Struts2、Hibernate和Spring的组合)作为基础框架,并引入Compass来实现全文检索功能,以此提升应用程序的数据查询效率和用户体验。 Struts2 是一个基于MVC(模型-视图-控制器)设计...
在实际项目中,这样的集成可以极大地提升开发效率,同时利用各框架的优点,如 Hibernate 的数据处理能力、Struts 2 的 Web 控制流、Spring 的 DI 和 AOP 支持,以及 Compass 的全文检索功能。然而,集成过程中也需要...
Struts2-Spring-Compass 是一个典型的Java企业级应用框架整合示例,它结合了Struts2、Spring3和Hibernate三大主流框架,并利用Compass实现了全文检索功能。这个项目基于Lucene 2.4.1,一个强大的全文搜索引擎库,...
标题中的"S2SH+compass"指的是一个基于Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的Java Web应用,再加上Compass搜索引擎来实现站内全文检索的功能。这种组合常用于构建复杂的企业级应用,因为它提供...
在这个实例中,"TestCompass"可能是包含具体代码和配置文件的测试项目,用于演示如何将STRUTS、SPRING、HIBERNATE和COMPASS集成。开发者可能需要创建Action类来处理业务逻辑,配置Spring的bean来管理依赖,设置...
通过以上步骤和技巧,我们可以将Compass有效地集成到Struts2、Spring和Hibernate的环境中,实现高效、强大的全文搜索功能。这将极大地提升Web应用的用户体验,特别是对于内容丰富的网站或信息管理系统,全文搜索功能...
SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。Compass是一个基于Lucene的全文搜索引擎库,它简化了在Java应用中集成全文检索的功能。本教程将重点讲解...
使用compass+lucene实现简单的全文...里面整合了spring2.5、hibernate3.2、struts2.0,是对数据库进行全文检索的一个非常好的demo的所有jar包组合! 对研究基于数据库检索的java开源搜索引擎的朋友有很大的参考价值
在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个常见的企业级应用开发组合。 首先,让我们深入了解一下Compass。Compass是一个开源项目,它的...
SSH2+Compass2.2搜索实例是一个基于Java Web开发的综合项目,它结合了Struts2.2.3、Spring 3.0.6、Hibernate3.6以及Compass2.2这四个核心技术,旨在提供一个高效且灵活的搜索功能。这个完整的工程是一个很好的学习...
在SSH(Spring、Struts和Hibernate)框架中集成Compass插件,可以帮助开发者轻松实现数据的全文检索功能,提高应用的用户体验。下面将详细介绍如何在Java SSH框架中集成Compass插件,并探讨相关知识点。 **SSH框架*...
下面是一个基于SSH(Struts2+Spring+Hibernate)架构的Compass使用示例: 1. **添加依赖库**:在SSH项目基础上添加Compass及相关依赖库,具体包括: - `compass-2.1.2.jar` - `compass-index-patch.jar` - `...
暗示了这是一个关于Java开发中的技术集成问题,其中涉及到三个主要组件:Compass、SSH2(可能是Spring Security或Subversion等,但根据提供的文件列表,这里更可能是指Spring框架)、以及Hibernate GPS。描述中提到...