开发者社区> 余二五> 正文

用compass快速给你的网站添加搜索功能<一>

简介:
+关注继续查看
  如果你的网站架构采用的是spring+hibernate。用现在比较流行的开源搜索引擎框架compass可以快速的给你的网站添加强大的搜索功能。从几十万条数据中,只需几毫秒的时间就可以搜索出你想要的数据。
       我现在只讲快速的把搜索功能构建到你的系统中。至于配置的细节,可能点到为止。望能够原谅。让我们开始吧。
      第一步:为你要搜索的表建立索引。我们不是通过关系数据库中的表直接建立索引的。而是借助于已通过hibernate这个中间桥梁而间接的给库表建立索引。我们知道hibernate主要完成对象到库表的映射。而我们是在对象的基础上建立索引的。假如我们的库表有一个叫video(影视表)的表。有字段,id(主键,唯一编号,递增),c_name(中文名),e_name(英文名),alias(别名),genre(类型),director(导演),create_time,update_time....这个表应该对应一个对象,也就是我们常说的pojo.
Video.java
package com.jack.video
public class Video{
 private Integer id;
 private String CName;
 private String EName;
 private String alias;
 private String genre;
 pivate String director;
 private Date createTime;
 private Date updateTime;
 
 public Video(){}
  public Integer getId() {
  return this.id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getCName() {
  return this.CName;
 }
 public void setCName(String CName) {
  this.CName = CName;
 }
 public String getEName() {
  return this.EName;
 }
 public void setEName(String EName) {
  this.EName = EName;
 }
 public String getAlias() {
  return this.alias;
 }
 public void setAlias(String alias) {
  this.alias = alias;
 }
 public String getGenre() {
  return this.genre
 }
 public void setGenre(String genre) {
  this.genre= genre;
 }
 
 public String getDirector() {
  return this.director;
 }
 public void setDirector(String director) {
  this.director = director;
 }
 
 public Date getCreateTime() {
  return this.ceateTime;
 }
 public void setCreateTime(Date ceateTime) {
  this.ceateTime = ceateTime;
 }
public Date getUpdateTime() {
  return this.updateTime;
 }
 public void setUpdateTime(Date updateTime) {
  this.updateTime = updateTime;
 }
}
   上面这个简单的pojo没什么可讲的,大家一看就很熟悉了。
    接下来我们要针对这个pojo建立索引,也就是建立一个cpm文件。具体配置如下:
Video.cpm.xml
<!DOCTYPE compass-core-mapping PUBLIC
        "-//Compass/Compass Core Mapping DTD 1.0//EN"
        "
[url]http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd[/url]">
<compass-core-mapping package="com.jack.video"
<class name="Video" alias="video"
index="video-index">
  <id name="id" />
  <property name="CName">
   <meta-data index="tokenized">CName</meta-data>
  </property>
  <property name="EName">
   <meta-data index="tokenized">EName</meta-data>
  </property>
  <property name="alias">
   <meta-data index="tokenized">alias</meta-data>
  </property>
  <property name="genre">
   <meta-data index="un_tokenized">genre</meta-data>
  </property>
    <property name="director">
   <meta-data index="tokenized">director</meta-data>
  </property>
  <property name="createTime">
   <meta-data index="no">trueCreateTime</meta-data>
  </property>
  <property name="updateTime">
   <meta-data index="no">updateTime</meta-data>
  </property>
 </class>
</compass-core-mapping>
   简单的配置文件讲解一下,这个文件的package属性是指导pojo(Video.java)所在的包。<class name="Video" alias="video"
index="video-index"> .name就是类名了。alias就是给这个类在起一个别名。index是指生成索引所在的文件夹的名字。后面你就会明白的。
 <property name="CName">
   <meta-data index="tokenized">CName</meta-data>
  </property>
  这个标签中的name就是Video.java中的那些属性名。<meta-data index="tokenized">这个属性指明了,该字段索引的策略,index有三个值,默认是tokenized表示先分词在索引,no表示既不分词也不索引,un_tokenized表示不分词但索引。其中还有一个属性store表示是否存储,它有两个值, yes/no.默认就是yes.表示对该字段存储。这是常用到的两个属性,其他还有很多,但是不是常用的。这两个就够了。至于其他的属性我们一般不再这里配置,一般在另外一个配置文件中统一配置。每个cpm文件都可以用到的。
 第二步:配置compass文件。
<!-- compass主配置 -->
 <bean id="compass" class="org.compass.spring.LocalCompassBean">
  <property name="compassSettings">
   <props>
    <prop key="compass.engine.connection">E:/video</prop>
    <prop key="compass.transaction.factory">
     org.compass.spring.transaction.SpringSyncTransactionFactory
    </prop>
  <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer"jeasy.analysis.MMAnalyzer </prop>
    <prop
     key="compass.engine.highlighter.default.formatter.simple.pre">
     <![CDATA[<font color="red"><b>]]>
    </prop>
    <prop
     key="compass.engine.highlighter.default.formatter.simple.post">
     <![CDATA[</b></font>]]>
    </prop>
   </props>
  </property>
  <property name="transactionManager">
   <ref local="transactionManager" />
  </property>
  <property name="resourceLocations">
   <list>
    <value>
     classpath:com/jack/video/Video.cpm.xml
    </value>
   </list>
  </property>
 </bean>
 <!-- 同步更新索引 -->
 <bean id="hibernateGps"
  class="org.compass.gps.impl.SingleCompassGps" init-method="start"
  destroy-method="stop">
  <property name="compass">
   <ref bean="compass" />
  </property>
  <property name="gpsDevices">
   <list>
    <bean
     class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
     <property name="gpsDevice" ref="hibernateGpsDevice" />
    </bean>
   </list>
  </property>
 </bean>
 <!--hibernate驱动 链接compass和hibernate -->
 <bean id="hibernateGpsDevice"
  class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice">
  <property name="name">
   <value>hibernateDevice</value>
  </property>
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
  在这里我并没有配置compass.cfg.xml这个文件。我把它里面该配置的都统一配置到了上面那个文件里了。
    今天先写到这,后面还有两部分。









本文转自 weijie@java 51CTO博客,原文链接:http://blog.51cto.com/weijie/74298,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SAP Hybris Commerce 6.0发布,六大革新功能抢鲜看
SAP Hybris Commerce 6.0发布,六大革新功能抢鲜看   http://www.aiweibang.com/yuedu/115318884.html     SAP Hybris Commerce 6.0版本强势来袭。
1385 0
9个功能强大的信息图制作网站
 如今信息图(infographic)已越来越多地用于我们的工作与学习中。它会帮助你把数据和信息以视觉化的形式迅速直观地传达给受众。本期的互动中国分享带来了9个功能强大的网站,这些在线网站可以帮助你制作信息图,便捷又迅速。
1151 0
SAP Hybris Commerce 新版本功能解析
  SAP Hybris Commerce 新版本功能解析   http://tech.
1368 0
IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置
原文:IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 站点--右键属性--http头 扩展名  mime类型.
1433 0
直播平台建设过程中不可或缺的推送功能
App内的消息推送不仅能够给用户提供通知信息,提高用户活跃度,还能够起到召回一部分老用户的作用。那么在直播平台建设的过程中,关于第三方推送也就是我们所说的消息推送功能又该如何实现呢?
1303 0
Total Commander之添加两边同时进行文件夹切换操作
Total Commander最方便之处在于两列文件管理视窗,这样复制备份文件就很方便,但有的时候想人工查看两个具有相同目录结构的文件夹时,比如和FTP上的文件夹对比。如果先切换左边的目录,再切换右边的目录,文件夹多了就很繁琐,很麻烦。 可以这样做,先在工具栏新建一个按钮,然后选择按钮的“命令”为“cm_SyncChangeDir”,描述为“两边窗口同步移到上层文件夹”,序号”2600″
1451 0
继克仔修改了我的RssReader后,添加了的用mail发送文章的功能!
修改后的源代码下载:http://files.cnblogs.com/aowind/RssReader2.rar主要添加了一个mail.vb的窗体:源代码如下: Imports System.web.mailPublic Class mailClass mail    Inherits System.Windows.Forms.Form#Region " Windows 窗体设计器生成的代码 "    Public Sub New()Sub New()        MyBase.New()        '该调用是 Windows 窗体设计器所必需的。
500 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载