| 搜索引擎(compass)学习笔记 |
|
| 作者是 宋针还 | |
| 2007-12-24 06:08:06 | |
|
下载地址:https://compass.dev.java.net/files/documents/4669/71790/compass-1.2-with-dependencies.zip 本人用的是里面带的一个例子(petclinic),主要的配置文件有:petclinic-servlet.xml,applicationContext-hibernate.xml,petclinic-cpm.xml,petclinic-cmd.xml,petclinic-hbm.xml,compass.cfg.xml(查找资料后,为了用paoding中文分词而加上)。 注:配置文件中的注释都是网上资料或本人对其的理解,如果有误还请指教,以免误导学习者。 petclinic-servlet.xml: 1 <?xml version="1.0" encoding="UTF-8" ?>
applicationContext-hibernate.xml:2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 3 <beans> 4 <!-- ========================= 消息来源定义 ========================= --> 5 <!-- 加载"/WEB-INF/classes"目录下messages*.properties文件 --> 6 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 7 <property name="basename"><value>messages</value></property> 8 </bean> 9 10 <!-- ========================= 映射定义 ============================= --> 11 <!-- 加载"/WEB-INF/classes"目录下views.properties文件 --> 12 <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> 13 <property name="basename"><value>views</value></property> 14 </bean> 15 <!-- 定义异常处理VIEW --> 16 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 17 <property name="exceptionMappings"> 18 <props> 19 <prop key="org.compass.core.CompassException">dataAccessFailure</prop> 20 <prop key="org.springframework.dao.DataAccessException">dataAccessFailure</prop> 21 <prop key="org.springframework.transaction.TransactionException">dataAccessFailure</prop> 22 </props> 23 </property> 24 </bean> 25 <!-- 定义url映射 --> 26 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 27 <property name="mappings"> 28 <props> 29 <prop key="/welcome.htm">clinicController</prop> 30 <prop key="/tutorial.htm">clinicController</prop> 31 <prop key="/spring-tutorial.htm">clinicController</prop> 32 <prop key="/vets.htm">clinicController</prop> 33 <prop key="/findOwners.htm">findOwnersForm</prop> 34 <prop key="/owner.htm">clinicController</prop> 35 <prop key="/addOwner.htm">addOwnerForm</prop> 36 <prop key="/editOwner.htm">editOwnerForm</prop> 37 <prop key="/addPet.htm">addPetForm</prop> 38 <prop key="/editPet.htm">editPetForm</prop> 39 <prop key="/addVisit.htm">addVisitForm</prop> 40 <prop key="/search.htm">searchController</prop> 41 <prop key="/index.htm">indexController</prop> 42 </props> 43 </property> 44 </bean> 45 46 47 <!-- ========================= 控制器定义 ========================= --> 48 <bean id="compassSearchHelper" class="org.compass.sample.petclinic.CompassSearchHelper"> 49 <property name="highlightFields"> 50 <list> 51 <value>description</value> 52 </list> 53 </property> 54 <property name="pageSize"><value>10</value></property> 55 <constructor-arg ref="compass"/> 56 </bean> 57 <!-- 搜索控制器定义 --> 58 <bean id="searchController" class="org.compass.spring.web.mvc.CompassSearchController"> 59 <property name="compass"><ref bean="compass"/></property> 60 <property name="searchView"><value>searchView</value></property> 61 <property name="searchResultsView"><value>searchResultsView</value></property> 62 <property name="pageSize"><value>10</value></property> 63 <property name="searchHelper"><ref local="advanceCompassSearchHelper"/></property> 64 </bean> 65 <!-- 索引控制器定义 --> 66 <bean id="indexController" class="org.compass.spring.web.mvc.CompassIndexController"> 67 <property name="compassGps"><ref bean="compassGps"/></property> 68 <property name="indexView"><value>indexView</value></property> 69 <property name="indexResultsView"><value>indexResultsView</value></property> 70 </bean> 71 72 <!-- 定义clinic控制器 --> 73 <bean id="clinicController" class="org.compass.sample.petclinic.web.ClinicController"> 74 <property name="methodNameResolver"><ref local="clinicControllerResolver"/></property> 75 <property name="clinic"><ref bean="clinic"/></property> 76 </bean> 77 78 <!-- --> 79 <bean id="clinicControllerResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> 80 <property name="mappings"> 81 <props> 82 <prop key="/welcome.htm">welcomeHandler</prop> 83 <prop key="/tutorial.htm">tutorialHandler</prop> 84 <prop key="/spring-tutorial.htm">springTutorialHandler</prop> 85 <prop key="/vets.htm">vetsHandler</prop> 86 <prop key="/owner.htm">ownerHandler</prop> 87 </props> 88 </property> 89 </bean> 90 <!-- 定义FORM --> 91 <bean id="findOwnersForm" class="org.compass.sample.petclinic.web.FindOwnersForm"> 92 <property name="formView"><value>findOwnersForm</value></property> 93 <property name="selectView"><value>selectOwnerView</value></property> 94 <property name="successView"><value>ownerRedirect</value></property> 95 <property name="clinic"><ref bean="clinic"/></property> 96 </bean> 97 <!-- 定义FORM --> 98 <bean id="addOwnerForm" class="org.compass.sample.petclinic.web.AddOwnerForm"> 99 <property name="formView"><value>ownerForm</value></property> 100 <property name="successView"><value>ownerRedirect</value></property> 101 <property name="validator"><ref local="ownerValidator"/></property> 102 <property name="clinic"><ref bean="clinic"/></property> 103 </bean> 104 <bean id="editOwnerForm" class="org.compass.sample.petclinic.web.EditOwnerForm"> 105 <property name="formView"><value>ownerForm</value></property> 106 <property name="successView"><value>ownerRedirect</value></property> 107 <property name="validator"><ref local="ownerValidator"/></property> 108 <property name="clinic"><ref bean="clinic"/></property> 109 </bean> 110 <bean id="ownerValidator" class="org.compass.sample.petclinic.validation.OwnerValidator"/> 111 <bean id="addPetForm" class="org.compass.sample.petclinic.web.AddPetForm"> 112 <property name="formView"><value>petForm</value></property> 113 <property name="successView"><value>ownerRedirect</value></property> 114 <property name="validator"><ref local="petValidator"/></property> 115 <property name="clinic"><ref bean="clinic"/></property> 116 </bean> 117 <bean id="editPetForm" class="org.compass.sample.petclinic.web.EditPetForm"> 118 <property name="formView"><value>petForm</value></property> 119 <property name="successView"><value>ownerRedirect</value></property> 120 <property name="validator"><ref local="petValidator"/></property> 121 <property name="clinic"><ref bean="clinic"/></property> 122 </bean> 123 <bean id="petValidator" class="org.compass.sample.petclinic.validation.PetValidator"/> 124 <!-- 定义FORM,用了visitValidatro和clinic属性 --> 125 <bean id="addVisitForm" class="org.compass.sample.petclinic.web.AddVisitForm"> 126 <property name="formView"><value>visitForm</value></property> 127 <property name="successView"><value>ownerRedirect</value></property> 128 <property name="validator"><ref local="visitValidator"/></property> 129 <property name="clinic"><ref bean="clinic"/></property> 130 </bean> 131 <!-- 定义bean属性 --> 132 <bean id="visitValidator" class="org.compass.sample.petclinic.validation.VisitValidator"/> 133 </beans> 1 <?xml version="1.0" encoding="UTF-8"?>
compass.cfg.xml:2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 3 <beans> 4 <!-- ========================= JDBC资源文件定义 ========================= --> 5 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 6 <property name="location"><value>/WEB-INF/jdbc.properties</value></property> 7 </bean> 8 <!-- 定义数据源 --> 9 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 10 <property name="driverClassName"><value>${jdbc.driverClassName}</value></property> 11 <property name="url"><value>${jdbc.url}</value></property> 12 <property name="username"><value>${jdbc.username}</value></property> 13 <property name="password"><value>${jdbc.password}</value></property> 14 </bean> 15 <!-- 定义Hibernate的SessionFactory --> 16 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 17 <property name="dataSource"><ref local="dataSource"/></property> 18 <property name="mappingResources"> 19 <value>petclinic.hbm.xml</value> 20 </property> 21 <property name="hibernateProperties"> 22 <props> 23 <prop key="hibernate.dialect">${hibernate.dialect}</prop> 24 <prop key="hibernate.show_sql">true</prop> 25 <prop key="hibernate.generate_statistics">true</prop> 26 </props> 27 </property> 28 <property name="eventListeners"> 29 <map> 30 <entry key="merge"> 31 <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> 32 </entry> 33 </map> 34 </property> 35 </bean> 36 <!-- COMPASS相关配置 --> 37 <bean id="compass" class="org.compass.spring.LocalCompassBean"> 38 <property name="resourceLocations"> 39 <list> 40 <!-- 这里是compass所需要的两个关于数据项的配置文件 --> 41 <value>classpath:org/compass/sample/petclinic/petclinic.cmd.xml</value> 42 <value>classpath:petclinic.cpm.xml</value> 43 </list> 44 </property> 45 <property name="configLocation"> 46 <value>classpath:compass.cfg.xml</value> 47 </property> 48 <property name="compassSettings"> 49 <props> 50 <!-- 索引文件在服务器上的存储路径 --> 51 <!-- 加亮显示 --> 52 <prop key="compass.engine.highlighter.default.formatter.simple.pre"> 53 <![CDATA[<font color="red"><b>]]> 54 </prop> 55 <prop key="compass.engine.highlighter.default.formatter.simple.post"> 56 <![CDATA[</b></font>]]> 57 </prop> 58 </props> 59 </property> 60 <property name="transactionManager"> 61 <ref local="transactionManager" /> 62 </property> 63 </bean> 64 65 <bean id="queryAnalyzer" class="net.paoding.analysis.analyzer.PaodingAnalyzer"> 66 </bean> 67 68 69 <!-- 与hibernate的绑定,用Hibernate3事件系统,支持Real Time Data Mirroring.经Hiberante的数据改变会自动被反射到索引里面 --> 70 <!--<bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice">--> 71 <bean id="hibernateGpsDevice" class="org.compass.gps.device.hibernate.HibernateGpsDevice"> 72 <property name="name"><value>hibernateDevice</value></property> 73 <property name="sessionFactory"><ref local="sessionFactory" /></property> 74 <property name="nativeExtractor"><bean class="org.compass.spring.device.hibernate.SpringNativeHibernateExtractor" /></property> 75 </bean> 76 <!-- Compass中建立索引与mirror database change的部件,定义了init-method 和destory-method, 77 会自动随ApplicaitonContext的启动,开始监控Hibernate的变化,经Hiberante的数据改变会自动被反射到索引里面 --> 78 <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop"> 79 <property name="compass"><ref bean="compass" /></property> 80 <property name="gpsDevices"> 81 <list> 82 <bean class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper"> 83 <property name="gpsDevice" ref="hibernateGpsDevice" /> 84 </bean> 85 </list> 86 </property> 87 </bean> 88 <!-- 定义事务处理交于hibernate3 --> 89 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 90 <property name="sessionFactory"><ref local="sessionFactory"/></property> 91 </bean> 92 93 <!-- ========================= 业务对象相关定义 ========================= --> 94 <bean id="clinicTarget" class="org.compass.sample.petclinic.hibernate.HibernateClinic"> 95 <property name="sessionFactory"><ref local="sessionFactory"/></property> 96 </bean> 97 <!-- 定义拦截器 --> 98 <bean id="clinic" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 99 <property name="transactionManager"><ref local="transactionManager"/></property> 100 <property name="target"><ref local="clinicTarget"/></property> 101 <property name="transactionAttributes"> 102 <props> 103 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 104 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 105 <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> 106 <prop key="store*">PROPAGATION_REQUIRED</prop> 107 </props> 108 </property> 109 </bean> 110 </beans> 1 <?xml version="1.0" encoding="UTF-8"?>
petclinic-cpm.xml(列出部分):2 <compass-core-config 3 xmlns="http://www.opensymphony.com/compass/schema/core-config" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.opensymphony.com/compass/schema/core-config 6 http://www.opensymphony.com/compass/schema/compass-core-config.xsd"> 7 8 <compass name="default"> 9 <connection> 10 <file path="/${user.home}/compass" /> <!-- 这里是索引文件的存放路径 --> 11 </connection> 12 13 <searchEngine> 14 <!-- 因是使用自己的分词算法,所以这里的类型必须是CustomAnalyzer --> 15 <analyzer name="paodingAnalyer" type="CustomAnalyzer" analyzerClass="net.paoding.analysis.analyzer.PaodingAnalyzer"> 16 <stopWords> 17 <stopWord value="test" /> 18 </stopWords> 19 </analyzer> 20 </searchEngine> 21 22 </compass> 23 </compass-core-config> 1 <?xml version="1.0"?> 2 <!DOCTYPE compass-core-mapping PUBLIC 3 "-//Compass/Compass Core Mapping DTD 1.0//EN" 4 "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd"> 5 6 <!-- 这里的包名必须和pojo的包名一致 --> 7 <compass-core-mapping |
