<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個人空間
            最近看研究了一下搜索引擎(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          <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>
    compass.cfg.xml:
     1 <?xml version="1.0" encoding="UTF-8"?>
     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>
    petclinic-cpm.xml(列出部分):
     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 package="org.compass.sample.petclinic">
     8 
     9 <!-- 定義實體及其字段的對應關系 -->
    10 
    11 <!-- 注意實體及其字段的名稱的大小寫應當與pojo對象一致,而不是與數據庫一致
    12   關于pojo與數據庫的對應表的一致性關系由hibernate的映謝文件定義,而不是這個文件
    13   當前映射文件只定義compass與hibernate的關系 -->
    14     <contract alias="entity">
    15         <id name="id" />
    16     </contract>
    17 
    18     <contract alias="named-entity" extends="entity">
    19         <property name="name">
    20             <meta-data>${petclinic.name}</meta-data>
    21         </property>
    22     </contract>
    23 
    24     <contract alias="person" extends="entity">
    25         <property name="firstName">
    26             <meta-data>${petclinic.firstName}</meta-data>
    27         </property>
    28 
    29         <property name="lastName">
    30             <meta-data>${petclinic.lastName}</meta-data>
    31         </property>
    32 
    33         <property name="address">
    34             <meta-data>${petclinic.address}</meta-data>
    35         </property>
    36 
    37         <property name="city">
    38             <meta-data>${petclinic.city}</meta-data>
    39         </property>
    40 
    41         <property name="telephone">
    42             <meta-data>${petclinic.telephone}</meta-data>
    43         </property>
    44     </contract>
    45 
    petclinic-cmd.xml(列出部分):
     1 <?xml version="1.0"?>
     2 <!DOCTYPE compass-core-meta-data PUBLIC 
     3     "-//Compass/Compass Core Meta Data DTD 1.0//EN"
     4     "http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd">
     5 
     6 <compass-core-meta-data>
     7 
     8     <!-- 定義一個實體和字段組-->
     9     <meta-data-group id="petclinic" displayName="Petclinic Meta Data">
    10     
    11         <description>Petclinic Meta Data</description>       
    12         <uri>http://compass/sample/petclinic</uri>
    13         
    14         <!-- 申明所有需要檢索的實體--> 
    15         <alias id="vet" displayName="Vet">
    16             <description>Vet alias</description>
    17             <uri>http://compass/sample/petclinic/alias/vet</uri>
    18             <name>vet</name>
    19         </alias>
    20 
    21         <alias id="pet" displayName="Pet">
    22             <description>Pet alias</description>
    23             <uri>http://compass/sample/petclinic/alias/pet</uri>
    24             <name>pet</name>
    25         </alias>
    26 
    27         <alias id="owner" displayName="Owner">
    28             <description>Owner alias</description>
    29             <uri>http://compass/sample/petclinic/alias/owner</uri>
    30             <name>owner</name>
    31         </alias>
    32 
    33         <alias id="visit" displayName="Visit">
    34             <description>Visit alias</description>
    35             <uri>http://compass/sample/petclinic/alias/visit</uri>
    36             <name>visit</name>
    37         </alias>
    38 
    39         <alias id="specialty" displayName="Specialty">
    40             <description>Specialty alias</description>
    41             <uri>http://compass/sample/petclinic/alias/specialty</uri>
    42             <name>specialty</name>
    43         </alias>
    44 
    45         <alias id="petType" displayName="Pet Type">
    46             <description>Pet Type alias</description>
    47             <uri>http://compass/sample/petclinic/alias/petType</uri>
    48             <name>petType</name>
    49         </alias>
    50 
    51         <!-- 申明所有需要檢索的屬性或者字段,而不管這些屬性或者字段是哪個實體的 -->
    52         <meta-data id="type" displayName="Type">
    53             <description>Type of an entity in the system</description>
    54             <uri>http://compass/sample/petclinic/type</uri>
    55             <name>type</name>
    56             <value id="mdPerson">person</value>
    57         </meta-data>
    58 
    59         <meta-data id="name" displayName="Name">
    60             <description>The name of an entity</description>
    61             <uri>http://compass/sample/petclinic/name</uri>
    62             <name>name</name>
    63         </meta-data>
    petclinic-hbm.xml就不做介紹,普通的hibernate配置文件。
            接下來是一個問題也是本人筆記的原因,
            在本人上一篇隨筆(http://www.tkk7.com/szhswl/archive/2007/12/18/168437.html)寫到查詢時的注意問題,用"tes*"做為查詢條件時是前綴查詢,lucene里QueryParser類實例了PrefixQuery類,在compass1.2源代碼里org.compass.core.lucene.engine.queryparser.CompassQueryParser類繼承了并且重寫了QueryParser類里的getPrefixQuery方法,方法源代碼如下:
    1     protected Query getPrefixQuery(String field, String termStr) throws ParseException {
    2         if (getLowercaseExpandedTerms()) {
    3             termStr = termStr.toLowerCase();
    4         }
    5 
    6         Term t = new Term(field, termStr);
    7         return new ConstantScorePrefixQuery(t);\
    8     }
    也就是說用"tes*"查詢時在compass1.2里實例了ConstantScorePrefixQuery,compass1.2用的是lucene2.2,本人查看了lucene2.2里源代碼,ConstantScorePrefixQuery類里實現高亮時用到的一個重要方法源代碼如下:
    1   public void extractTerms(Set terms) {
    2     // OK to not add any terms when used for MultiSearcher,
    3     // but may not be OK for highlighting
    4   }
    方法里說得很清楚,根本就沒有實現,所以用compass1.2的petclinic例子時,用"tes*"查詢時,查詢結果沒錯,但頁面${hit.highlightedText['highlightfield']}
    高亮顯示出現問題,然后本人把org.compass.core.lucene.engine.queryparser.CompassQueryParser類里getPrefixQuery方法注釋,高亮顯示居然正常了,但這還是修改了compass1.2里的源代碼,應該不是最佳解決方案,如果有達人知道還請指教。

    轉載請注明出處。

    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護己之短??浼褐L,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
    http://www.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-23 13:25 宋針還 閱讀(3059) 評論(4)  編輯  收藏

    FeedBack:
    # re: 搜索引擎(compass)學習筆記
    2007-12-23 13:41 | 祎恬凡
    交換一個鏈接,怎么樣?  回復  更多評論
      
    # re: 搜索引擎(compass)學習筆記
    2007-12-23 14:10 | 宋針還
    @祎恬凡
    OK  回復  更多評論
      
    # re: 搜索引擎(compass)學習筆記[未登錄]
    2009-06-22 14:31 | jane
    CompassQueryParser和CompassMultiFieldQueryParser這兩個類如何使用,樓主有沒有比較好的例子?正在研究compass,在這個地方遇到了困難,還請樓主不吝賜教。  回復  更多評論
      
    # re: 搜索引擎(compass)學習筆記[未登錄]
    2009-08-31 12:57 | 宋針還
    @jane
    很久沒整compass了,當時是根據領導需求,研究下。不好意思。  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲免费精彩视频在线观看| 三上悠亚电影全集免费| 日韩免费一区二区三区在线| 亚洲AV人无码综合在线观看 | 一级毛片aaaaaa免费看| 国产性爱在线观看亚洲黄色一级片| 亚洲av无码片vr一区二区三区| 国产无人区码卡二卡三卡免费| 亚洲欧洲日产专区| 在线看片免费人成视久网| 亚洲AV无码一区二区二三区软件| 中文字幕a∨在线乱码免费看 | 99re6热视频精品免费观看| 亚洲精品国产精品乱码视色| 中文字幕在线视频免费观看| 亚洲一区二区三区乱码A| 日韩大片在线永久免费观看网站 | 亚洲sm另类一区二区三区| 黄瓜视频高清在线看免费下载| 亚洲欧洲日本国产| 18观看免费永久视频| 亚洲美女视频网站| 啦啦啦完整版免费视频在线观看| 久久青草亚洲AV无码麻豆| 国产一级淫片a免费播放口| 亚洲AV日韩AV永久无码下载| 久久免费精彩视频| 亚洲伊人tv综合网色| 99精品视频在线观看免费专区| 夜夜亚洲天天久久| 国产在线观看麻豆91精品免费 | 色偷偷噜噜噜亚洲男人| 浮力影院第一页小视频国产在线观看免费| 国产v亚洲v天堂a无| 成人免费a级毛片| 亚洲欧美日韩综合久久久| 青青草国产免费久久久91| 在线观看亚洲电影| 亚洲第一成人影院| 在线视频网址免费播放| 国产AV无码专区亚洲Av|