`
compass
  • 浏览: 11814 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用Compass实现一个简单的搜索引擎[转]

阅读更多
Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。依靠顶级的Lucene搜索引擎,Compass 结合了,像 Hibernate和 Sprin的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化. Compass的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷。
    下面以一个应用场景分步骤讲解如何利用compass实现搜索引擎:
1. 这里我们有一个Article表,希望利用compass实现对它的搜索。
  Article的结构如下:
  CREATE TABLE `article` (
    `ArticleID` bigint(20) NOT NULL,
    `PersonInfoID` bigint(20) default NULL,
    `ArticleTitle` varchar(200) default NULL,
    `PublishDate` datetime default NULL,
    `Summary` text,
    `Content` longtext,
    `KeyList` text,
    PRIMARY KEY  (`ArticleID`),
    KEY `PersonInfoArticle_FK` (`PersonInfoID`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  我们希望利用compass对它的ArticleTitle、Summary、Content和KeyList进行全文检索。下面开始行动吧。
  
2. 首先到http://www.opensymphony.com/compass/download.action 上下载一个compass的发布版,我们下载的是Version 1.0.0的With Dependencies 。这样就可能省去寻找相关信赖库的麻烦了。

3. 将compass1.0解压到一个合适的目录,我们的工作目录是d:\develop\compass1.0

4. 我们是在eclipse环境下实现当前要求的,所以建议你也安装一个eclipse 3.2。

5. 首先我们在eclipse中建立了一个java工程,名为mycompass。

6. 然后我们在工程目录中建立了一个lib目录,用来存放本次工程所需要的所有compass和其它相关的库文件,并将他们设置为当前工程构建路径中需要的库文件。所有这些文件可以在compass的安装目录的lib目录找到。

  下面是我们的库文件列表:
 
7. 建立了Article表的pojo类。
  package com.darkhe.sample.mycompass;
  
  // Generated 2006-8-2 10:57:06 by Hibernate Tools 3.2.0.beta6a
  
  import java.util.Date;
  
  /**
   * Article generated by hbm2java
   */
  public class Article implements java.io.Serializable {
  
   // Fields   
  
   private long articleId;
  
   private Long personInfoId;
  
   private String articleTitle;
  
   private Date publishDate;
  
   private String summary;
  
   private String content;
  
   private String keyList;
  
   // Constructors
  
   /** default constructor */
   public Article() {
   }
  
   /** minimal constructor */
   public Article(long articleId) {
    this.articleId = articleId;
   }
  
   /** full constructor */
   public Article(long articleId, Long personInfoId, String articleTitle,
     Date publishDate, String summary, String content, String keyList) {
    this.articleId = articleId;
    this.personInfoId = personInfoId;
    this.articleTitle = articleTitle;
    this.publishDate = publishDate;
    this.summary = summary;
    this.content = content;
    this.keyList = keyList;
   }
  
   // Property accessors
   public long getArticleId() {
    return this.articleId;
   }
  
   public void setArticleId(long articleId) {
    this.articleId = articleId;
   }
  
   public Long getPersonInfoId() {
    return this.personInfoId;
   }
  
   public void setPersonInfoId(Long personInfoId) {
    this.personInfoId = personInfoId;
   }
  
   public String getArticleTitle() {
    return this.articleTitle;
   }
  
   public void setArticleTitle(String articleTitle) {
    this.articleTitle = articleTitle;
   }
  
   public Date getPublishDate() {
    return this.publishDate;
   }
  
   public void setPublishDate(Date publishDate) {
    this.publishDate = publishDate;
   }
  
   public String getSummary() {
    return this.summary;
   }
  
   public void setSummary(String summary) {
    this.summary = summary;
   }
  
   public String getContent() {
    return this.content;
   }
  
   public void setContent(String content) {
    this.content = content;
   }
  
   public String getKeyList() {
    return this.keyList;
   }
  
   public void setKeyList(String keyList) {
    this.keyList = keyList;
   }
  
  }


8. 建立hibernate的pojo到数据表映射文件
 

xml 代码

<!---->

  1. <!----><?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  3.  <!---->  
  4.  <hibernate-mapping>  
  5.     <class name="com.darkhe.sample.mycompass.Article" table="article" catalog="freedom">  
  6.         <id name="articleId" type="long">  
  7.             <column name="ArticleID" />  
  8.             <generator class="assigned" />  
  9.         </id>  
  10.         <property name="personInfoId" type="java.lang.Long">  
  11.             <column name="PersonInfoID"/> 
  12.         </property>  
  13.         <property name="articleTitle" type="string">  
  14.             <column name="ArticleTitle" length="200"/>   
  15.         </property>  
  16.         <property name="publishDate" type="timestamp">  
  17.             <column name="PublishDate" length="19"/>
  18.         </property>  
  19.         <property name="summary" type="string">  
  20.             <column name="Summary" length="65535"/> 
  21.         </property>  
  22.         <property name="content" type="string">  
  23.             <column name="Content"/>   
  24.         </property>  
  25.         <property name="keyList" type="string">  
  26.             <column name="KeyList" length="65535"/>  
  27.         </property>  
  28.     </class>  
  29.  </hibernate-mapping>  


 <!----> 9. 开始配置compass,首先是compass的系统配置文件 mycompass.cfg.xml
<!---->

xml 代码
  1. <!----><?xml version="1.0" encoding="UTF-8"?>  
  2. <compass-core-config  
  3.  xmlns="http://www.opensymphony.com/compass/schema/core-config"  
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.  xsi:schemaLocation="http://www.opensymphony.com/compass/schema/core-config   
  6.            http://www.opensymphony.com/compass/schema/compass-core-config.xsd">  
  7.  <compass name="default">  
  8.    <connection>  
  9.      <file path="target" /> <!---->
  10.    </connection>  
  11.    <searchEngine>       <!---->  
  12.      <analyzer name="MMAnalyer" type="CustomAnalyzer" analyzerClass="jeasy.analysis.MMAnalyzer">  
  13.        <stopWords>  
  14.          <stopWord value="test" /> 
  15.        </stopWords>
  16.      </analyzer>  
  17.    </searchEngine>  
  18.  </compass>  
  19. </compass-core-config>  

 在上面的配置中,我们使用的我们选用的一个中文分词算法库,你可以用compass自带的。具体compass提供了哪些分词算法,请查阅compass的手册。


10. 然后是mycompass.cmd.xml
<!---->

xml 代码
  1. <!----><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE compass-core-meta-data PUBLIC "-//Compass/Compass Core Meta Data DTD 1.0//EN" 
  3. "http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd">  
  4. <compass-core-meta-data>  
  5. <!---->  <meta-data-group id="mycompass" displayName="My Compass">       
  6.     <descrīption>Mycompass Meta Data</descrīption>          
  7.     <uri>http://com/darkhe/sample/mycompass</uri>               
  8. <!---->           
  9.     <alias id="Article" displayName="Article">  
  10.       <descrīption>Article alias</descrīption>  
  11.       <uri>http://com/darkhe/sample/mycompass/alias/Article</uri>  
  12.       <name>Article</name>  
  13.     </alias>           
  14.  <!---->           
  15.     <meta-data id="ArticleTitle" displayName="ArticleTitle">  
  16.       <descrīption>ArticleTitle</descrīption>  
  17.       <uri>http://com/darkhe/sample/mycompass/alias/ArticleTitle</uri>  
  18.       <name>ArticleTitle</name>  
  19.     </meta-data>           
  20.     <meta-data id="PublishDate" displayName="PublishDate">  
  21.       <descrīption>PublishDate</descrīption>  
  22.       <uri>http://com/darkhe/sample/mycompass/alias/PublishDate</uri>  
  23.       <name format="yyyy-MM-dd hh:mm:ss">date</name>  
  24.     </meta-data>           
  25.     <meta-data id="Summary" displayName="Summary">  
  26.       <descrīption>Summary</descrīption>  
  27.       <uri>http://com/darkhe/sample/mycompass/alias/Summary</uri>  
  28.       <name>Summary</name>  
  29.     </meta-data>           
  30.     <meta-data id="Content" displayName="Content">  
  31.       <descrīption>Content</descrīption>  
  32.       <uri>http://com/darkhe/sample/mycompass/alias/Content</uri>  
  33.       <name>Content</name>  
  34.     </meta-data>  
  35.     <meta-data id="KeyList" displayName="KeyList">  
  36.       <descrīption>KeyList</descrīption>  
  37.       <uri>http://com/darkhe/sample/mycompass/alias/KeyList</uri>  
  38.       <name>KeyList</name>  
  39.     </meta-data>                                   
  40.   </meta-data-group>       
  41. </compass-core-meta-data>  

11. 再是mycompass.cpm.xml
<!---->

xml 代码
  1. <!----><?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE compass-core-mapping PUBLIC "-//Compass/Compass Core Mapping DTD 1.0//EN" 
  3. "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd">  
  4. <!---->  
  5. <compass-core-mapping package="com.darkhe.sample.mycompass"> 
  6.   <beans>  
  7.        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  8.   <property name="location">  
  9.     <value>classpath:jdbc.properties</value>  
  10.   </property>  
  11. </bean>  <!---->  
  12.  <!---->  
  13.  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  14.   <property name="driverClassName">  
  15.    <value>${jdbc.driverClassName}</value>  
  16.   </property>  
  17.   <property name="url">  
  18.    <value>${jdbc.url}</value>  
  19.   </property>  
  20.   <property name="username">  
  21.    <value>${jdbc.username}</value>  
  22.   </property>  
  23.   <property name="password">  
  24.    <value>${jdbc.password}</value>  
  25.   </property>  
  26.  </bean>    <!---->  
  27.  <!---->  
  28.  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  29.   <property name="dataSource">  
  30.    <ref local="dataSource" />  
  31.   </property>  
  32.   <property name="mappingResources">  
  33.    <list>  
  34.     <value>com/darkhe/sample/mycompass/Article.hbm.xml</value>  
  35.    </list>  
  36.   </property>  
  37.   <property name="hibernateProperties">  
  38.    <props>  
  39.     <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
  40.     <prop key="hibernate.show_sql">false</prop>  
  41.     <prop key="hibernate.generate_statistics">true</prop>  
  42.    </props>  
  43.   </property>  
  44.   <property name="eventListeners">  
  45.    <map>  
  46.     <entry key="merge">  
  47.      <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />  
  48.     </entry>  
  49.    </map>  
  50.   </property>  
  51.  </bean>     
  52.  <!---->  
  53.  <bean id="compass" class="org.compass.spring.LocalCompassBean">  
  54.   <property name="resourceLocations">  
  55.    <list>  
  56.     <value>classpath:mycompass.cmd.xml</value> <!---->  
  57.     <value>classpath:mycompass.cpm.xml</value>  
  58.    </list>  
  59.   </property>  
  60.   <property name="configLocation">  
  61.    <value>classpath:mycompass.cfg.xml</value> <!---->  
  62.   </property>  
  63.   <!---->  
  64. </beans>  

15. 注意上面的所以配置文件,根据我们上面的配置,都应当放到classpath的根路径。
16. 建立工具类,用来进行spring引擎的初始化工作。

java 代码
  1. /**  
  2.  * 

    @(#) IOC.java 2006-2-1 0:08:23

     
  3.  * 

    Copyright (c) 2005-2006 ???????????????????

     
  4.  */  
  5. package com.darkhe.sample.mycompass;   
  6.   
  7. import org.springframework.context.ApplicationContext;   
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  9.   
  10. /**  
  11.  *   
  12.  *   
  13.  * @version 1.0 2006-2-1  
  14.  * @author darkhe  
  15.  */  
  16. public class IOC {   
分享到:
评论
1 楼 zznj1123 2008-10-31  
没写完啊 大哥

相关推荐

    java开源包3

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包4

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    JAVA上百实例源码以及开源项目源代码

    简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...

    JAVA上百实例源码以及开源项目

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    java源码包---java 源码 大量 实例

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...

    java开源包1

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包11

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包2

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包6

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包5

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包10

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包8

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包7

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包9

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java开源包101

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    Java资源包01

    AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是...

    java源码包2

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包3

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

    java源码包4

    一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...

Global site tag (gtag.js) - Google Analytics