posts - 33,  comments - 70,  trackbacks - 0

          Compass

          作者: 地獄男爵

          1.概述

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

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

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

          2.Object/Search Engine Mapping - 配置XML

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

          2.1 XML配置

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

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

           <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 自動替換OSEM對應的原數(shù)據(jù)(Common meta-data)標簽的值. ${...} 很像ant.
          簡單的可以理解為alias對應為表,meta-data為column.具體闡述,請見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集成的實現(xiàn)

          4.1 hibernate 配置

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

          4.2 spring配置

          hiberante中的sessionFactory,transactionManager相比大家也是輕車熟路了.這里還是代過(因為不牽扯稿費的問題嗎^_^ ).compass已經(jīng)對對spring集成做了很好的封裝,讓我們的使用更加簡單,我們可以不為compass編寫一行代碼,就可以做完搜索引擎的檢索.下面談一下compass在spring中的簡明配置.

          <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ù)本機文件索引,進行查詢.
          hibernateGpsDevice: 注入sessionFactory.

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

          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>

          調用到indexBookController,完成索引重建,調用到searchBookController,完成搜索.

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

          搜索結果:

          <div class="left"><c:if test="${! empty searchResults}">
          耗時: <c:out value="${searchResults.searchTime}" />ms
          <c:if test="${empty searchResults.hits}">
          ,沒有找到符合條件的圖書,請確保已在管理后臺建立索引。
          </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>

          ...

          posted on 2006-05-31 17:49 地獄男爵(hellboys) 閱讀(5423) 評論(18)  編輯  收藏 所屬分類: 編程語言(c/c++ java python sql ......)

          FeedBack:
          # re: Compass - springside 中的應用
          2006-06-01 11:49 | 差沙
          哈哈,行呀,寫得不錯呀~~~~  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-06-01 16:19 | 江南白衣
          再加個springside的連接就更妙了:)  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-06-06 09:20 | Tin
          酷,compass關注很久了,看了很多教程,這個寫的最親近。謝謝hellboys。  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-06-07 14:53 | Compass
          詳細介紹一下cpm.xml和cmd.xml的配置就更更妙了  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-06-27 21:47 | 小天蝎
          同意——“詳細介紹一下cpm.xml和cmd.xml的配置就更更妙了”,看了手冊還是不太明白,搜索了介紹也不多。  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-07-04 18:34 | 老頭
          呵呵,不錯啊,如果能夠給一個例子程序,那就棒極了,等你好消息啊,  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-07-05 10:07 | 老頭
          你好,能不能把這個DEMO的源碼,給我一份,,我現(xiàn)在也在做搜索這塊,,有這么好的東西,想研究一下..謝謝了.我的郵箱地址為;jsrmade@126.com  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-07-05 18:51 | 老頭
          大俠,,請解釋一下cpm.xml和cmd.xml的配置嘛,謝謝  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-07-06 09:29 | 地獄男爵(hellboys)
          http://www.springside.org.cn
          國內開源項目,有完整的源碼和annotation和xml的配置和應用  回復  更多評論
            
          # re: Compass - springside 中的應用
          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”表示什么?為什么要這么寫?  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-09-23 16:12 | 下一道彩虹
          我用compass自己做過自動建索引的.但最近,我想到手動做索引.因為我要分析entity.我可以拿到我想做索引的List<enitiy>而不是數(shù)據(jù)庫里的全部...此時,我可以怎么做呢?拿到session之后.一個一個的add進去么,然后compassGps.index()呢?可不可以貼點關于此的幾句code呢?不勝感激...  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-09-29 16:17 | 下一道彩虹
          怎么說呢?其實我的意思是.在entity上加標注也好.為pojo寫mapping文件也好.就一句compassGps.index()就完成索引的建立不是我想要的.因為我的數(shù)據(jù)非常多.有400萬條記錄左右.于是我不知道.它為我索引到了什么地方.我想讓它建索引如我計劃的.每次索引1000條,不然.再好的機器也會out of mem?  回復  更多評論
            
          # re: Compass - springside 中的應用
          2006-10-17 09:29 | 小白
          能把JAVA代碼全寫出來就更好了
            回復  更多評論
            
          # re: Compass - springside 中的應用[未登錄]
          2007-03-12 14:06 | dawei
          寫的好  回復  更多評論
            
          # re: Compass - springside 中的應用
          2007-06-15 14:13 | 風焰莊主
          搞什么啊,全部都是抄Springside上面的,還不注明出處  回復  更多評論
            
          # re: Compass - springside 中的應用
          2007-08-01 20:28 | liuxiaolin425@163.com
          如果想深入研究,可以先研究一下lucene,compass只是一個java搜索引擎的framework,可能還有很多不能滿足我們的j2ee開發(fā)的需要,其實lucene很易用,也易學,因為我們不用關心起底層的數(shù)據(jù)結構,只要明白上層的實現(xiàn)機制,以及如何使用其提供的API就可以了,推薦大家看一下《lucene in Action》這本書,目前已經(jīng)有中文版出版了。  回復  更多評論
            
          # re: Compass - springside 中的應用
          2007-09-13 03:42 | jlive@live.com
          請教下copass支持cascade 嗎

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

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

          常用鏈接

          隨筆分類

          隨筆檔案

          文章檔案

          相冊

          連接

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南澳县| 游戏| 孝昌县| 武定县| 金门县| 耒阳市| 玉林市| 桑植县| 内乡县| 屯留县| 金山区| 深水埗区| 中西区| 岳阳县| 怀仁县| 贵州省| 冀州市| 伊吾县| 广昌县| 海淀区| 临清市| 册亨县| 隆化县| 木兰县| 宁夏| 屏山县| 克拉玛依市| 都昌县| 开平市| 永顺县| 洪江市| 荥阳市| 无棣县| 句容市| 项城市| 南宫市| 定结县| 慈利县| 鄂托克前旗| 微山县| 高碑店市|