最近看研究了一下搜索引擎(COMPASS),学到的东西不多,但还是把所学的东西在这里记录一下,本人用的是COMPASS1.2
下载地址: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" ?>
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>
applicationContext-hibernate.xml:
1 <?xml version="1.0" encoding="UTF-8"?>
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 <