posts - 33,  comments - 70,  trackbacks - 0

          Compass

          作者: 地獄男爵

          1.概述

          springside 官方網(wǎng)站: http://www.springside.org.cn

          網(wǎng)站: http://www.compassframework.org/

          Compass是一流的開放源碼JAVA搜索引擎框架,對(duì)于你的應(yīng)用修飾,搜索引擎語(yǔ)義更具有能力。依靠頂級(jí)的Lucene搜索引擎,Compass 結(jié)合了,像 Hibernate和 Sprin的流行的框架,為你的應(yīng)用提供了從數(shù)據(jù)模型和數(shù)據(jù)源同步改變的搜索力.并且添加了2方面的特征,事物管理和快速更新優(yōu)化. Compass的目標(biāo)是:把java應(yīng)用簡(jiǎn)單集成到搜索引擎中.編碼更少,查找數(shù)據(jù)更便捷 .

          2.Object/Search Engine Mapping - 配置XML

          OSEM: 對(duì)象搜索引擎影影射(Object Search Engine Mapping),通過xml配置文件,提供了POJO's (Plain Old Java Objects)到搜索引擎.

          2.1 XML配置

          一般都是 *.cpm.xml 形式 .

          1) package指定了對(duì)應(yīng)java類的包名,
          2)class為pojo類名.contract為公共部分, 子類被可以extends.Property 對(duì) java類的屬性。
          3)資源的Property引用的Search Engine meta-data.
          注意: id為類標(biāo)識(shí).

           <compass-core-mapping package="org.springside.bookstore.domain">  

          <contract alias="product"> <id name="id"/> <property name="name"> <meta-data>${springside.name}</meta-data> </property> <property name="descn"> <meta-data>${springside.descn}</meta-data> </property> </contract>

          <class name="Book" alias="${springside.book}" extends="product"> <property name="author"> <meta-data>${springside.author}</meta-data> </property>
          <property name="publisher"> <meta-data>${springside.publisher}</meta-data> </property> </class>

          </compass-core-mapping>

          3.Common Meta Data

          定義Compass配置文件(*.cfg.xml). Compass 自動(dòng)替換OSEM對(duì)應(yīng)的原數(shù)據(jù)(Common meta-data)標(biāo)簽的值. ${...} 很像ant.
          簡(jiǎn)單的可以理解為alias對(duì)應(yīng)為表,meta-data為column.具體闡述,請(qǐng)見compass reference(Chapter 3. Search Engine)

          <compass-core-meta-data>  

          <meta-data-group id="springside" displayName="SpringSide Book Meta Data">
          <description>SpringSide Meta Data</description> <uri>http://compass/springside</uri>

          <alias id="book" displayName="Book"> <description>Book alias</description> <uri>http://compass/springside/alias/book</uri> <name>book</name> </alias>

          <meta-data id="name" displayName="Name"> <uri>http://compass/springside/name</uri> <name>descn</name> </meta-data>

          <meta-data id="descn" displayName="Description"> <uri>http://compass/springside/descn</uri> <name>descn</name> </meta-data>

          <meta-data id="author" displayName="Author"> <description>The author of a book</description> <uri>http://compass/springside/author</uri> <name>author</name> </meta-data>

          <meta-data id="publisher" displayName="Publisher"> <description>The publisher of a book</description> <uri>http://compass/springside/publisher</uri> <name>publisher</name> </meta-data> </meta-data-group>

          </compass-core-meta-data>?

          4. 與spring,hibernate集成的實(shí)現(xiàn)

          4.1 hibernate 配置

          配置通透的pojo,class所應(yīng)對(duì)的hibernate配置hbm.xml,這里就不在熬述.具體可見springside源碼.

          4.2 spring配置

          hiberante中的sessionFactory,transactionManager相比大家也是輕車熟路了.這里還是代過(因?yàn)椴粻砍陡遒M(fèi)的問題嗎^_^ ).compass已經(jīng)對(duì)對(duì)spring集成做了很好的封裝,讓我們的使用更加簡(jiǎn)單,我們可以不為compass編寫一行代碼,就可以做完搜索引擎的檢索.下面談一下compass在spring中的簡(jiǎn)明配置.

          <beans>
          <bean id="compass" class="org.compass.spring.LocalCompassBean"> <property name="resourceLocations"> <list> <value>classpath:compass-springside.cmd.xml</value> <value>classpath:compass-springside.cpm.xml</value> </list>
          </property> <property name="compassSettings"> <props> <prop key="compass.engine.connection">file://${user.home}/springside/compass</prop> <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop> </props> </property>
          <property name="transactionManager" ref="transactionManager"/> </bean>

          <bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">
          <property name="name"> <value>hibernateDevice</value> </property> <property name="sessionFactory" ref="sessionFactory"/> </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> <ref local="hibernateGpsDevice"/> </list> </property> </bean> </beans>

          resourceLocations: 裝入compass的配置文件 *.cmd.xml,*.cpm.xml
          compass.engine.connection: 就是索引做存放的本機(jī)文件的路徑.搜索引擎也是根據(jù)本機(jī)文件索引,進(jìn)行查詢.
          hibernateGpsDevice: 注入sessionFactory.

          The Hibernate Gps Device:用Hibernate 3 事件系統(tǒng),提高支持Real Time Data Mirroring.經(jīng)Hiberante的數(shù)據(jù)改變自動(dòng)被反射到索引里面.

          4.3 web中的配置

          <bean id="indexBookController" class="org.compass.spring.web.mvc.CompassIndexController">
          <property name="compassGps"><ref bean="compassGps"/></property>
          <property name="indexView"><value>/admin/indexBook.jsp</value></property>
          <property name="indexResultsView"><value>/admin/indexBook.jsp</value></property>
          </bean>

          <bean id="searchBookController" class="org.compass.spring.web.mvc.CompassSearchController">
          <property name="compass"><ref bean="compass"/></property>
          <property name="searchView"><value>/home/top.jsp</value></property>
          <property name="searchResultsView"><value>/home/searchBook.jsp</value></property>
          <property name="pageSize"><value>3</value></property>
          </bean>

          調(diào)用到indexBookController,完成索引重建,調(diào)用到searchBookController,完成搜索.

          搜索頁(yè)面 :
          <INPUT type="text" size="20" name="query" class="search" value=""> 

          搜索結(jié)果:

          <div class="left"><c:if test="${! empty searchResults}">
          耗時(shí): <c:out value="${searchResults.searchTime}" />ms
          <c:if test="${empty searchResults.hits}">
          ,沒有找到符合條件的圖書,請(qǐng)確保已在管理后臺(tái)建立索引。
          </c:if>
          <c:forEach var="hit" items="${searchResults.hits}">
          <c:choose>
          <c:when test="${hit.alias == 'book'}">
          <p><a
          href="<c:url value="/bookstore.do?action=bookDetail&id=${hit.data.id}"/>">
          《<c:out value="${hit.data.name}" />》 </a> <br />
          作者:<c:out value="${hit.data.author}" /> &nbsp; 出版社: <c:out
          value="${hit.data.publisher}" /></p>
          </c:when>
          </c:choose>
          </c:forEach>

          ...


          FeedBack:
          # re: Compass - springside 中的應(yīng)用
          2006-06-01 11:49 | 差沙
          哈哈,行呀,寫得不錯(cuò)呀~~~~  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-06-01 16:19 | 江南白衣
          再加個(gè)springside的連接就更妙了:)  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-06-06 09:20 | Tin
          酷,compass關(guān)注很久了,看了很多教程,這個(gè)寫的最親近。謝謝hellboys。  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-06-07 14:53 | Compass
          詳細(xì)介紹一下cpm.xml和cmd.xml的配置就更更妙了  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-06-27 21:47 | 小天蝎
          同意——“詳細(xì)介紹一下cpm.xml和cmd.xml的配置就更更妙了”,看了手冊(cè)還是不太明白,搜索了介紹也不多。  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-07-04 18:34 | 老頭
          呵呵,不錯(cuò)啊,如果能夠給一個(gè)例子程序,那就棒極了,等你好消息啊,  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-07-05 10:07 | 老頭
          你好,能不能把這個(gè)DEMO的源碼,給我一份,,我現(xiàn)在也在做搜索這塊,,有這么好的東西,想研究一下..謝謝了.我的郵箱地址為;jsrmade@126.com  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-07-05 18:51 | 老頭
          大俠,,請(qǐng)解釋一下cpm.xml和cmd.xml的配置嘛,謝謝  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-07-06 09:29 | 地獄男爵(hellboys)
          http://www.springside.org.cn
          國(guó)內(nèi)開源項(xiàng)目,有完整的源碼和annotation和xml的配置和應(yīng)用  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-09-11 10:41 | bidu go die
          正在看compass,麻煩問
          <alias id="book" displayName="Book">
          <description>Book alias</description>
          <uri>http://compass/sample/library/alias/book</uri>
          <name>book</name>
          </alias>

          中的“uri”表示什么?為什么要這么寫?  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-09-23 16:12 | 下一道彩虹
          我用compass自己做過自動(dòng)建索引的.但最近,我想到手動(dòng)做索引.因?yàn)槲乙治鰁ntity.我可以拿到我想做索引的List<enitiy>而不是數(shù)據(jù)庫(kù)里的全部...此時(shí),我可以怎么做呢?拿到session之后.一個(gè)一個(gè)的add進(jìn)去么,然后compassGps.index()呢?可不可以貼點(diǎn)關(guān)于此的幾句code呢?不勝感激...  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-09-29 16:17 | 下一道彩虹
          怎么說呢?其實(shí)我的意思是.在entity上加標(biāo)注也好.為pojo寫mapping文件也好.就一句compassGps.index()就完成索引的建立不是我想要的.因?yàn)槲业臄?shù)據(jù)非常多.有400萬(wàn)條記錄左右.于是我不知道.它為我索引到了什么地方.我想讓它建索引如我計(jì)劃的.每次索引1000條,不然.再好的機(jī)器也會(huì)out of mem?  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2006-10-17 09:29 | 小白
          能把JAVA代碼全寫出來(lái)就更好了
            回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用[未登錄]
          2007-03-12 14:06 | dawei
          寫的好  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2007-06-15 14:13 | 風(fēng)焰莊主
          搞什么啊,全部都是抄Springside上面的,還不注明出處  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2007-08-01 20:28 | liuxiaolin425@163.com
          如果想深入研究,可以先研究一下lucene,compass只是一個(gè)java搜索引擎的framework,可能還有很多不能滿足我們的j2ee開發(fā)的需要,其實(shí)lucene很易用,也易學(xué),因?yàn)槲覀儾挥藐P(guān)心起底層的數(shù)據(jù)結(jié)構(gòu),只要明白上層的實(shí)現(xiàn)機(jī)制,以及如何使用其提供的API就可以了,推薦大家看一下《lucene in Action》這本書,目前已經(jīng)有中文版出版了。  回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2007-09-13 03:42 | jlive@live.com
          請(qǐng)教下copass支持cascade 嗎

          我現(xiàn)在寫了個(gè)圖書搜索的功能,可是檢索出的compent是null;

            回復(fù)  更多評(píng)論
            
          # re: Compass - springside 中的應(yīng)用
          2007-09-16 14:51 | 沈先生
          我看到compass支持 all field的搜索,可是我用Luke查看索引,發(fā)現(xiàn)all字段對(duì)應(yīng)的Text和alias的的Text一樣?不知道如何才能讓all代表所有的字段?  回復(fù)  更多評(píng)論
            
          <2006年6月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          隨筆分類

          隨筆檔案

          文章檔案

          相冊(cè)

          連接

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 深州市| 涞水县| 延津县| 横山县| 龙口市| 会宁县| 肥城市| 东方市| 香格里拉县| 连州市| 上思县| 安福县| 兴安盟| 工布江达县| 台前县| 伊春市| 永年县| 南宁市| 闽侯县| 天峻县| 茶陵县| 称多县| 平度市| 锦屏县| 宁夏| 双峰县| 运城市| 寿光市| 合山市| 军事| 克东县| 始兴县| 潼关县| 高陵县| 通渭县| 波密县| 阳朔县| 慈利县| 连城县| 榆社县| 镇康县|