Compass開放源碼JAVA搜尋引擎架構

來源:互聯網
上載者:User
文章目錄
  • 2.1 XML配置
  • 4.1 hibernate 配置
  • 4.2 spring配置
  • 4.3 web中的配置
 

Compass

作者: 地獄男爵

1.概述

springside 官方網站: http://www.springside.org.cn

網站: http://www.compassframework.org/

Compass 是一流的開放源碼JAVA搜尋引擎架構,對於你的應用修飾,搜尋引擎語義更具有能力。依靠頂級的Lucene搜尋引擎,Compass 結合了,像 Hibernate和 Sprin的流行的架構,為你的應用提供了從資料模型和資料來源同步改變的搜尋力.並且添加了2方面的特徵,事物管理和快速更新最佳化. Compass的目標是:把java應用簡單整合到搜尋引擎中.編碼更少,尋找資料更便捷 .

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對應的原資料(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整合的實現 4.1 hibernate 配置

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

 

4.2 spring配置

hiberante中的sessionFactory,transactionManager相比大家也是輕車熟路了.這裡還是代過(因為不牽扯稿費的問題嗎^_^ ).compass已經對對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: 就是索引做存放的本機檔案的路徑.搜尋引擎也是根據本機檔案索引,進行查詢.
hibernateGpsDevice: 注入sessionFactory.

The Hibernate Gps Device:用Hibernate 3 事件系統,提高支援Real Time Data Mirroring.經Hiberante的資料改變自動被反射到索引裡面.

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>

...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.