`

struts2+hibernate+spring+compass进行全文搜索

阅读更多
今天完成了一个搜索功能,把compass整合到项目当中,做一下笔记,希望对大家有用。
1.搜索文本框

<s:form action="search.action" method="post">
<input class=lst type=text name=queryString maxlength=2048 value="<s:property value='queryString'/>" title="搜索">
<input type=submit name="btnG" class=lsb value="搜索图书">
</s:form>

2.struts.xml配置
<action name="search" class="com.book.action.ProductAction" method="search">
<result name="search">searchResults.jsp</result>
</action>
3.Action层
public String search(){
	List results=productService.searchProducts(productVo.getQueryString());
	ServletActionContext.getRequest().setAttribute("searchresults", results);
	ServletActionContext.getRequest().setAttribute("queryString", productVo.getQueryString());
	return "search";
	}


4.service层
public List searchProducts(String queryString) {
	Compass compass = compassTemplate.getCompass();
	CompassSession session=compass.openSession();
	session.beginLocalTransaction();
	List list = new ArrayList();
		
	CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();
		
	for(int i=0;i<hits.length();i++){
	ProductInfo hit=(ProductInfo)hits.data(i);
	ProductInfo productInfo = this.find(hit.getId());
	String name_highlighter = hits.highlighter(i).fragment("name");   
	productInfo.setName(name_highlighter); 
	list.add(productInfo);
	}
	session.close();
	return list;
	}


记得注入compassTemplate
5.compass配置文件
<?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:com/book</value>
			</list>
		</property>
		<property name="connection">
			<value>/lucene/indexes</value>
		</property>


		<property name="classMappings">
			<list>
				<value>com.book.bean.ProductInfo</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>
				  <!--高亮显示配置start-->  
            <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>    
<!--高亮显示配置end-->  
				  
			</props>
			
		</property>

		<property name="transactionManager" ref="transactionManager" />
	</bean>

	<bean id="jpaGpsDevice"  
        class="org.compass.gps.device.jpa.JpaGpsDevice">   
        <property name="name">   
            <value>JpaGpsDevice</value>   
        </property>   

        <property name="entityManagerFactory"  
            ref="entityManagerFactory" />   

        <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="jpaGpsDevice" />
				</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="com.book.service.impl.CompassIndexBuilder"
		lazy-init="false">
		<property name="compassGps" ref="compassGps" />
		<property name="buildIndex" value="true" />
		<property name="lazyTime" value="10" />
	</bean>



</beans>

6.重建索引的Builder
/**
* 通过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;
    }
}
0
0
分享到:
评论

相关推荐

    struts2+hibernate3+spring3+compass

    struts2+spring3+hibernate3+compass实现全文检索功能,希望对初学者有所帮助!

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0产品搜索

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0 包含所有jar包,按readme.txt导入并运行即可 开始不用分了................

    struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现(无jar包)

    在"struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现"这个项目中,首先你需要配置Struts2、Spring和Hibernate,确保它们能正常工作。这包括编写相应的配置文件(如struts.xml、spring-context.xml、...

    spring + hibernate + struts2 + compass2.1

    在这个框架中,Spring作为核心的依赖注入(DI)和面向切面编程(AOP)容器,Hibernate是用于对象关系映射(ORM)的库,Struts2则作为MVC(模型-视图-控制器)架构的框架,而Compass2.1则是用于全文搜索引擎的工具。...

    spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 案例.rar

    spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 Compass将lucene、Spring、Hibernate三者结合

    Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件

    Struts、Hibernate、Spring、JPA、Lucene、JBPM和Compass是Java开发中常用的一系列技术,它们各自在不同的领域发挥着重要作用。这里我们将深入探讨这些技术以及如何将它们整合在一起进行配置。 1. **Struts**:...

    JAVA 全文搜索 struts2+spring+hibernte+compass整合记录

    在本项目中,"JAVA 全文搜索 struts2+spring+hibernate+compass整合记录" 是一个关于如何在Java环境下集成四个关键组件来实现全文搜索引擎的实践教程。Struts2是一个流行的MVC框架,Spring是核心的依赖注入框架,...

    struts2 hibernate spring compass全文检索

    在本项目中,开发者利用SSH2(即Struts2、Hibernate和Spring的组合)作为基础框架,并引入Compass来实现全文检索功能,以此提升应用程序的数据查询效率和用户体验。 Struts2 是一个基于MVC(模型-视图-控制器)设计...

    compass-2.2.0+hibernate-3.2+struts-2.1.8.1+spring-framework-2.5.4

    标题 "compass-2.2.0+hibernate-3.2+struts-2.1.8.1+spring-framework-2.5.4" 指的是一个集成开发环境,它结合了四个关键的技术组件:Compass、Hibernate、Struts 2 和 Spring Framework,这些都是Java Web开发中的...

    STRUTS SPRING COMPASS 实例

    在这个实例中,"TestCompass"可能是包含具体代码和配置文件的测试项目,用于演示如何将STRUTS、SPRING、HIBERNATE和COMPASS集成。开发者可能需要创建Action类来处理业务逻辑,配置Spring的bean来管理依赖,设置...

    Compass与Struts2SpringHibernate的整合示例

    通过以上步骤和技巧,我们可以将Compass有效地集成到Struts2、Spring和Hibernate的环境中,实现高效、强大的全文搜索功能。这将极大地提升Web应用的用户体验,特别是对于内容丰富的网站或信息管理系统,全文搜索功能...

    SSH+compass 整合

    本资源是struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0整合实例,可以为初学入门者,提供个参考,本人也是网上找的,感觉很不错(因其中所用的jar文件太大,无法上传,大家可以自己添加各框架...

    ssh+compass实现站内搜索分页.rar

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。Compass是一个基于Lucene的全文搜索引擎库,它简化了在Java应用中集成全文检索的功能。本教程将重点讲解...

    struts2-spring-compass:Struts2整合Spring3、Hibernate、Compass实现全文检索(基于lucene2.4.1和极易中文分词器)

    Struts2-Spring-Compass 是一个典型的Java企业级应用框架整合示例,它结合了Struts2、Spring3和Hibernate三大主流框架,并利用Compass实现了全文检索功能。这个项目基于Lucene 2.4.1,一个强大的全文搜索引擎库,...

    S2SH+compass (实现站内全文检索)

    标题中的"S2SH+compass"指的是使用Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的组合,再加上Compass搜索引擎库来实现一个网站内部的全文检索功能。这种组合常见于Java Web开发中,用于构建复杂、高...

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

    SSH2+Compass2.2搜索实例是一个基于Java Web开发的综合项目,它结合了Struts2.2.3、Spring 3.0.6、Hibernate3.6以及Compass2.2这四个核心技术,旨在提供一个高效且灵活的搜索功能。这个完整的工程是一个很好的学习...

    Compass全文检索完整实例,可运行

    在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个常见的企业级应用开发组合。 首先,让我们深入了解一下Compass。Compass是一个开源项目,它的...

Global site tag (gtag.js) - Google Analytics