`
wjjbfq
  • 浏览: 82143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

compass+paoding分词器与Spring的集成使用

阅读更多

1、先说一下paoding分词器的使用:

1>把安装目录下的paoding-analysis.jar文件拷贝到项目的classpath下.
2>把安装目录下的dic整个拷贝到项目的src下.
3>从安装目录下classes目录中的paoding-dic-home.properties拷贝到项目的src下.并且在文件中添加如下内容:
paoding.dic.home=classpath:dic

如果遇到这种错误:说dic不是一个目录.原因是因为你的项目运行在一个带有空格和中文路径
如:你的tomcat安装在Documents and Settings目录下,那么项目会运行在一个带有空格的路径

 

2、compass的用法就是1、创建索引 2、进行搜索.

 

一、创建索引

 1、这里采用注解的方式映射。为需要建立索引的类 添加注解

 2、使用compass来创建compasssession进行增删改,这里涉及到一个问题,增删改都要开启事务,我们一般使用compass 主要是在增加删除修改一条实体数据记录后,同时进行索引的增删改,这是在一个事物中。怎么样处理这种情况呢?我们让spring来管理compass的事物。可以在spring的配置文件中这样配置:

<bean id="compass" class="org.compass.spring.LocalCompassBean">
	   <!-- 指定映射类方式 -->
	   <property name="classMappings">
	     <list>
	       <value>你需要进行创建索引的类全名,如:cn.itcast.bean.Person</value>
	     </list>
	   </property>
	   <!-- 扫描包方式 <property name="mappingScan" value="cn.itcast.bean" />  -->
	   <!-- XML文件配置方式 <property name="resourceLocations"><list><value>classpath:cn/itcast/bean/person.cmd.xml</value></list></property> -->	   
	   <property name="compassSettings">
            <props>
				<prop key="compass.engine.analyzer.default.type">net.paoding.analysis.analyzer.PaodingAnalyzer</prop>
                <prop key="compass.engine.connection">file://index/dir</prop>
                <prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<font color='red'>]]></prop>
                <prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</font>]]></prop>
                <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
            </props>
	   </property>
	   <property name="transactionManager" ref="txManager"/>//这里将我们配置的事务注入进来
	  <!--如果还需要读取classpath下默认的compass.cfg.xml配置,可以打开此配置
	  <property name="compassConfiguration">
	  		<bean class="org.compass.annotations.config.CompassAnnotationsConfiguration"/>
	  </property>
	  -->	
	</bean>
<!-- CompassGps为CompassGpsDevice提供Compass对象,他们一起为程序提供索引的实时更新  自动完成 索引的添加/更新/删除操作-->
 <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"  init-method="start" destroy-method="stop">
         <property name="compass" ref="compass"/>  
         <property name="gpsDevices">  
             <list>  
                 <!-- 针对Hibernate的GPS驱动 -->
     <bean class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice">  
             <property name="name" value="HibernateDevice"/>  
             <property name="sessionFactory" ref="sessionFactory"/>  
     </bean>
<!-- 针对JPA的GPS --><!-- 设置JPA驱动 -->
   <!-- <bean class="org.compass.gps.device.jpa.JpaGpsDevice">
      <property name="name" value="jpaDevice" />
      <property name="entityManagerFactory" ref="entityManagerFactory" />
      <property name="injectEntityLifecycleListener" value="true"/>
    </bean>-->
             </list>  
         </property>
 </bean>

 

 3、进行搜索

贴部分代码上来 用法类似

package cn.itcast.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.compass.core.Compass;
import org.compass.core.CompassCallback;
import org.compass.core.CompassHits;
import org.compass.core.CompassSession;
import org.compass.spring.CompassDaoSupport;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bean.Person;
import cn.itcast.bean.QueryResult;
import cn.itcast.service.PersonSearch;

@Service("personSeacher") @Transactional
public class PersonSearchBean extends CompassDaoSupport implements PersonSearch {
    @Resource(name="compass")//根据bean的名称注入Compass对象
	public void setCompassObject(Compass compass) {
       	super.setCompass(compass);
    }
    
	public QueryResult<Person> search(final String keyword, final int firstIndex, final int maxResult) {		
		QueryResult<Person> result = this.getCompassTemplate().execute(
		           new CompassCallback<QueryResult<Person>>() {
		               public QueryResult<Person> doInCompass(CompassSession session) {
		            	  QueryResult<Person> qr = new QueryResult<Person>();
		                  CompassHits hits = session.find(keyword);
		                  List<Person> persons = new ArrayList<Person>();
		     			  int length = firstIndex+ maxResult;
		     			  if(length>hits.length()) length = hits.length();			 
		     			  for(int i = firstIndex; i<length; i++){
		     				 Person person = (Person)hits.data(i);
		     				 person.setName(hits.highlighter(i).fragment("name"));
		     				 persons.add(person);
		     			  }
		     			  qr.setResultlist(persons);
		     			  qr.setTotalrecord(hits.length());
		     			  return qr;
		               }
		           }
		 );
		return result;
	}
}

 

分享到:
评论
1 楼 385104182 2010-07-11  
支持你,我们一起不放弃

相关推荐

    spring + hibernate + struts2 + compass2.1

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

    java开源包8

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包1

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包11

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包2

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包3

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包6

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包5

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包10

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包4

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包7

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包9

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包101

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    Java资源包01

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

Global site tag (gtag.js) - Google Analytics