posts - 33,  comments - 70,  trackbacks - 0

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>

...

posted on 2006-05-31 17:49 地狱男爵(hellboys) 阅读(5403) 评论(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的源码,给我一份,,我现在也在做搜索这块,,有这么好的东西,想研究一下..谢谢了.我的邮箱地址为;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>而不是数据库里的全部...此时,我可以怎么做呢?拿到session之后.一个一个的add进去么,然后compassGps.index()呢?可不可以贴点关于此的几句code呢?不胜感激...  回复  更多评论
  
# re: Compass - springside 中的应用
2006-09-29 16:17 | 下一道彩虹
怎么说呢?其实我的意思是.在entity上加标注也好.为pojo写mapping文件也好.就一句compassGps.index()就完成索引的建立不是我想要的.因为我的数据非常多.有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开发的需要,其实lucene很易用,也易学,因为我们不用关心起底层的数据结构,只要明白上层的实现机制,以及如何使用其提供的API就可以了,推荐大家看一下《lucene in Action》这本书,目前已经有中文版出版了。  回复  更多评论
  
# re: Compass - springside 中的应用
2007-09-13 03:42 | jlive@live.com
请教下copass支持cascade 吗

我现在写了个图书搜索的功能,可是检索出的compent是null;

  回复  更多评论
  
# re: Compass - springside 中的应用
2007-09-16 14:51 | 沈先生
我看到compass支持 all field的搜索,可是我用Luke查看索引,发现all字段对应的Text和alias的的Text一样?不知道如何才能让all代表所有的字段?  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2006年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

随笔分类

随笔档案

文章档案

相册

连接

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜