轉(zhuǎn)compass (http://www.agilejava.org/space/?108/action_viewspace_itemid_172.html)

          ???? Compass是一流的開放源碼JAVA搜索引擎框架,對于你的應(yīng)用修飾,搜索引擎語義更具有能力。依靠頂級的Lucene搜索引擎,Compass 結(jié)合了,像 Hibernate和 Sprin的流行的框架,為你的應(yīng)用提供了從數(shù)據(jù)模型和數(shù)據(jù)源同步改變的搜索力.并且添加了2方面的特征,事物管理和快速更新優(yōu)化. Compass的目標是:把java應(yīng)用簡單集成到搜索引擎中.編碼更少,查找數(shù)據(jù)更便捷。
          ??? 下面以一個應(yīng)用場景分步驟講解如何利用compass實現(xiàn)搜索引擎:
          1.?這里我們有一個Article表,希望利用compass實現(xiàn)對它的搜索。
          ??Article的結(jié)構(gòu)如下:
          ??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的發(fā)布版,我們下載的是Version 1.0.0的With Dependencies 。這樣就可能省去尋找相關(guān)信賴庫的麻煩了。

          3.?將compass1.0解壓到一個合適的目錄,我們的工作目錄是d:\develop\compass1.0

          4.?我們是在eclipse環(huán)境下實現(xiàn)當前要求的,所以建議你也安裝一個eclipse 3.2。

          5.?首先我們在eclipse中建立了一個java工程,名為mycompass。

          6.?然后我們在工程目錄中建立了一個lib目錄,用來存放本次工程所需要的所有compass和其它相關(guān)的庫文件,并將他們設(shè)置為當前工程構(gòu)建路徑中需要的庫文件。所有這些文件可以在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到數(shù)據(jù)表映射文件
          ?<?xml version="1.0"?>
          ?<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          ?"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          ?<!-- Generated 2006-8-2 10:57:07 by Hibernate Tools 3.2.0.beta6a -->
          ?<hibernate-mapping>
          ??? <class name="com.darkhe.sample.mycompass.Article" table="article" catalog="freedom">
          ??????? <comment></comment>
          ??????? <id name="articleId" type="long">
          ??????????? <column name="ArticleID" />
          ??????????? <generator class="assigned" />
          ??????? </id>
          ??????? <property name="personInfoId" type="java.lang.Long">
          ??????????? <column name="PersonInfoID">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??????? <property name="articleTitle" type="string">
          ??????????? <column name="ArticleTitle" length="200">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??????? <property name="publishDate" type="timestamp">
          ??????????? <column name="PublishDate" length="19">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??????? <property name="summary" type="string">
          ??????????? <column name="Summary" length="65535">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??????? <property name="content" type="string">
          ??????????? <column name="Content">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??????? <property name="keyList" type="string">
          ??????????? <column name="KeyList" length="65535">
          ??????????????? <comment></comment>
          ??????????? </column>
          ??????? </property>
          ??? </class>
          ?</hibernate-mapping>


          9.?開始配置compass,首先是compass的系統(tǒng)配置文件 mycompass.cfg.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <compass-core-config
          ?xmlns="http://www.opensymphony.com/compass/schema/core-config"
          ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          ?xsi:schemaLocation="http://www.opensymphony.com/compass/schema/core-config
          ?????????? http://www.opensymphony.com/compass/schema/compass-core-config.xsd">

          ?<compass name="default"> <!—這個名字隨你取了,但它是必須的-->

          ??<connection>
          ???<file path="target" /> <!—這里是索引文件的存放路徑,我們設(shè)置的是當前工程的相對路徑target-?
          ??</connection>

          ??<searchEngine>
          ??? <!-- 因是使用自己的分詞算法,所以這里的類型必須是CustomAnalyzer -->
          ????????? <analyzer name="MMAnalyer" type="CustomAnalyzer" analyzerClass="jeasy.analysis.MMAnalyzer">
          ????????????? <stopWords>
          ????????????????? <stopWord value="test" />
          ????????????? </stopWords>
          ????????? </analyzer>
          ????? </searchEngine>

          ?</compass>
          </compass-core-config>
          ?在上面的配置中,我們使用的我們選用的一個中文分詞算法庫,你可以用compass自帶的。具體compass提供了哪些分詞算法,請查閱compass的手冊。


          10.?然后是mycompass.cmd.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE compass-core-meta-data PUBLIC
          ??? "-//Compass/Compass Core Meta Data DTD 1.0//EN"
          ??? "http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd">

          <compass-core-meta-data>

          <!-- 定義一個實體和字段組-->
          ??? <meta-data-group id="mycompass" displayName="My Compass">
          ???
          ??????? <descrīption>Mycompass Meta Data</descrīption>??????
          ??????? <uri>http://com/darkhe/sample/mycompass</uri>
          ???
          ???????
          <!-- 申明所有需要檢索的實體-->???????
          ??????? <alias id="Article" displayName="Article">
          ??????????? <descrīption>Article alias</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/Article</uri>
          ??????????? <name>Article</name>
          ??????? </alias>
          ???????
          ?<!-- 申明所有需要檢索的屬性或者字段,而不管這些屬性或者字段是哪個實體的 -->???????
          ??????? <meta-data id="ArticleTitle" displayName="ArticleTitle">
          ??????????? <descrīption>ArticleTitle</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/ArticleTitle</uri>
          ??????????? <name>ArticleTitle</name>
          ??????? </meta-data>
          ???????
          ??????? <meta-data id="PublishDate" displayName="PublishDate">
          ??????????? <descrīption>PublishDate</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/PublishDate</uri>
          ??????????? <name format="yyyy-MM-dd hh:mm:ss">date</name>
          ??????? </meta-data>
          ???????
          ??????? <meta-data id="Summary" displayName="Summary">
          ??????????? <descrīption>Summary</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/Summary</uri>
          ??????????? <name>Summary</name>
          ??????? </meta-data>
          ???????
          ??????? <meta-data id="Content" displayName="Content">
          ??????????? <descrīption>Content</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/Content</uri>
          ??????????? <name>Content</name>
          ??????? </meta-data>

          ??????? <meta-data id="KeyList" displayName="KeyList">
          ??????????? <descrīption>KeyList</descrīption>
          ??????????? <uri>http://com/darkhe/sample/mycompass/alias/KeyList</uri>
          ??????????? <name>KeyList</name>
          ??????? </meta-data>???????
          ???????????????????????
          ??? </meta-data-group>
          ???
          </compass-core-meta-data>


          11.?再是mycompass.cpm.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE compass-core-mapping PUBLIC
          ??? "-//Compass/Compass Core Mapping DTD 1.0//EN"
          ??? "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd">

          <!-- 這里的包名必須和pojo的包名一致 -->
          <compass-core-mapping package="com.darkhe.sample.mycompass">

          <!-- 定義實體及其字段的對應(yīng)關(guān)系 -->

          <!-- 注意實體及其字段的名稱的大小寫應(yīng)當與pojo對象一致,而不是與數(shù)據(jù)庫一致
          ? 關(guān)于pojo與數(shù)據(jù)庫的對應(yīng)表的一致性關(guān)系由hibernate的映謝文件定義,而不是這個文件
          ? 當前映射文件只定義compass與hibernate的關(guān)系 -->

          ?<class name="Article" alias="${mycompass.Article}">
          ??<id name="ArticleId" />
          ??
          ??<property name="ArticleTitle">
          ???<meta-data>${mycompass.ArticleTitle}</meta-data>
          ??</property>

          ??<property name="PublishDate">
          ???<meta-data>${mycompass.PublishDate}</meta-data>
          ??</property>

          ??<property name="Summary">
          ???<meta-data>${mycompass.Summary}</meta-data>
          ??</property>

          ??<property name="Content">
          ???<meta-data>${mycompass.Content}</meta-data>
          ??</property>

          ??<property name="KeyList">
          ???<meta-data>${mycompass.KeyList}</meta-data>
          ??</property>
          ?</class>
          ?</compass-core-mapping>


          12.?log4j.properties
          log4j.rootLogger=WARN, stdout
          log4j.appender.stdout=org.apache.log4j.ConsoleAppender
          log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
          log4j.appender.stdout.layout.ConversionPattern=%d %p %c - %m%n
          log4j.logger.org.compass=INFO


          13.?jdbc.properties
          # Properties file with JDBC-related settings.
          # Applied by PropertyPlaceholderConfigurer from "applicationContext-*.xml".
          # Targeted at system administrators, to avoid touching the context XML files.
          jdbc.driverClassName=com.mysql.jdbc.Driver
          #jdbc.driverClassName=org.hsqldb.jdbcDriver
          #jdbc.url=jdbc:hsqldb:hsql://localhost:9001
          jdbc.url=jdbc:mysql://localhost:3306/testdb
          jdbc.username=test
          jdbc.password=test
          # Property that determines the Hibernate dialect
          # (only applied with "applicationContext-hibernate.xml")
          #hibernate.dialect=org.hibernate.dialect.HSQLDialect
          hibernate.dialect=org.hibernate.dialect.MySQLDialect

          14.?最后是applicationContext-hibernate.xml,這里集中配置了compass如何與spring與hibernate結(jié)合的。
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

          <!--
          ?- Application context definition for Petclinic on Hibernate.
          -->
          <beans>
          ?<!-- ========================= RESOURCE DEFINITIONS ========================= -->
          ?<!-- Configurer that replaces ${...} placeholders with values from a properties file -->
          ?<!-- (in this case, JDBC-related settings for the dataSource definition below) -->
          ?<bean id="propertyConfigurer"
          ??class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          ??<property name="location">
          ???<value>classpath:jdbc.properties</value>
          ??</property>
          ?</bean>
          ?<!-- Local DataSource that works in any environment -->
          ?<!-- Note that DriverManagerDataSource does not pool; it is not intended for production -->
          ?<!-- See JPetStore for an example of using Commons DBCP BasicDataSource as alternative -->
          ?<!-- See Image Database for an example of using C3P0 ComboPooledDataSource as alternative -->
          ?<bean id="dataSource"
          ??class="org.springframework.jdbc.datasource.DriverManagerDataSource">
          ??<property name="driverClassName">
          ???<value>${jdbc.driverClassName}</value>
          ??</property>
          ??<property name="url">
          ???<value>${jdbc.url}</value>
          ??</property>
          ??<property name="username">
          ???<value>${jdbc.username}</value>
          ??</property>
          ??<property name="password">
          ???<value>${jdbc.password}</value>
          ??</property>
          ?</bean>
          ?<!-- JNDI DataSource for J2EE environments -->
          ?<!--
          ??<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
          ??<property name="jndiName"><value>java:comp/env/jdbc/petclinic</value></property>
          ??</bean>
          ?-->
          ?<!-- Hibernate SessionFactory -->
          ?<bean id="sessionFactory"
          ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          ??<property name="dataSource">
          ???<ref local="dataSource" />
          ??</property>
          ??<property name="mappingResources">
          ???<list>
          ????<value>
          ?????com/darkhe/sample/mycompass/Article.hbm.xml <!-- 這里是hibernate里需要的數(shù)據(jù)映射文件 -->
          ????</value>
          ???</list>
          ??</property>
          ??<property name="hibernateProperties">
          ???<props>
          ????<prop key="hibernate.dialect">
          ?????${hibernate.dialect}
          ????</prop>
          ????<prop key="hibernate.show_sql">false</prop>
          ????<prop key="hibernate.generate_statistics">true</prop>
          ???</props>
          ??</property>
          ??<property name="eventListeners">
          ???<map>
          ????<entry key="merge">
          ?????<bean
          ??????class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
          ????</entry>
          ???</map>
          ??</property>
          ?</bean>


          ?<!-- COMPASS START -->
          ?<bean id="compass" class="org.compass.spring.LocalCompassBean">
          ??<property name="resourceLocations">
          ???<list>
          ????<value>classpath:mycompass.cmd.xml</value>?<!-- 這里是compass所需要的兩個關(guān)于數(shù)據(jù)項的配置文件 -->
          ????<value>classpath:mycompass.cpm.xml</value>
          ???</list>
          ??</property>
          ??<property name="configLocation">
          ???<value>classpath:mycompass.cfg.xml</value>?<!-- 這里是compass的系統(tǒng)配置文件的路徑 -->
          ??</property>
          ??<!--???????? <property name="compassSettings">
          ???<props>
          ???<prop key="compass.engine.connection">file://d:/target</prop>
          ???<prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
          ???</props>
          ???</property>-->

          ??<property name="transactionManager">
          ???<ref local="transactionManager" />
          ??</property>
          ?</bean>


          ?<bean id="hibernateGpsDevice"
          ??class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">
          ??<property name="name">
          ???<value>hibernateDevice</value>
          ??</property>
          ??<property name="sessionFactory">
          ???<ref local="sessionFactory" />
          ??</property>
          ?</bean>
          ?<bean id="compassGps" 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>
          ?<!-- COMPASS END -->
          </beans>

          15.?注意上面的所以配置文件,根據(jù)我們上面的配置,都應(yīng)當放到classpath的根路徑。
          16.?建立工具類,用來進行spring引擎的初始化工作。
          /**
          ?* <p>@(#) IOC.java 2006-2-1 0:08:23</p>
          ?* <p>Copyright (c) 2005-2006 ???????????????????</p>
          ?*/
          package com.darkhe.sample.mycompass;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          /**
          ?*
          ?*
          ?* @version 1.0 2006-2-1
          ?* @author darkhe
          ?*/
          public class IOC {
          ?private static ApplicationContext context = null;

          ?private static boolean isInit = false;

          ?private IOC() {
          ??super();
          ?}

          ?private static void init() {
          ?
          ??if (isInit == false) {
          ???String[] xmlfilenames = { "applicationContext-hibernate.xml" };

          ???context = new ClassPathXmlApplicationContext(xmlfilenames);

          ???isInit = true;
          ??}
          ?}

          ?/**
          ? *?
          ? * @return
          ? */
          ?public static ApplicationContext getContext() {
          ??if (context == null || isInit == false) {
          ???init();
          ??}
          ??return context;
          ?}

          ?/**
          ? *
          ? * @param name
          ? * @return
          ? */
          ?public static Object getBean(String name) {
          ??return getContext().getBean(name);
          ?}

          }


          17.?建立索引程序,用來數(shù)據(jù)庫中的建立索引
          /*
          ?* Copyright (c) 2005-2006
          ?* ChongQing Man-Month Technology Development Co. ,Ltd
          ?*
          ?* ---------------------------------------------------------------------------------
          ?* @(#) Inder.java, 2006-8-1 下午09:01:14
          ?* ---------------------------------------------------------------------------------
          ?*/
          package com.darkhe.sample.mycompass;

          import java.io.FileNotFoundException;

          import org.compass.gps.CompassGps;
          import org.springframework.context.ApplicationContext;

          /**
          ?* @author darkhe
          ?*
          ?*/
          public class Indexer {

          ?/**
          ? * @param args
          ? * @throws FileNotFoundException
          ? */
          ?public static void main(String[] args) throws FileNotFoundException {

          ???// 加裁自定義詞典
          ??DictionaryUtils.loadCustomDictionary();

          ??ApplicationContext context = IOC.getContext();

          ??// 得到spring環(huán)境中已經(jīng)配置和初始化好的compassGps對象
          ??CompassGps compassGps = (CompassGps) context.getBean("compassGps");
          ??// 調(diào)用index方法建立索引
          ??compassGps.index();

          ?}

          }

          18.?建立搜索程序,檢證compass的應(yīng)用。
          /*
          ?* Copyright (c) 2005-2006
          ?* ChongQing Man-Month Technology Development Co. ,Ltd
          ?*
          ?* ---------------------------------------------------------------------------------
          ?* @(#) Searcher.java, 2006-8-1 下午09:36:29
          ?* ---------------------------------------------------------------------------------
          ?*/

          package com.darkhe.sample.mycompass;

          import java.io.FileNotFoundException;

          import org.compass.core.Compass;
          import org.compass.core.CompassCallbackWithoutResult;
          import org.compass.core.CompassException;
          import org.compass.core.CompassHits;
          import org.compass.core.CompassSession;
          import org.compass.core.CompassTemplate;
          import org.compass.core.Resource;
          import org.springframework.context.ApplicationContext;

          /**
          ?* @author darkhe
          ?*
          ?*/
          public class Searcher {

          ?/**
          ? * @param args
          ? * @throws FileNotFoundException
          ? */
          ?public static void main(String[] args) throws FileNotFoundException {

          ??// 加裁自定義詞典
          ??DictionaryUtils.loadCustomDictionary();

          ??ApplicationContext context = IOC.getContext();

          ??Compass compass = (Compass) context.getBean("compass");

          ??CompassTemplate template = new CompassTemplate(compass);

          ??template.execute(new CompassCallbackWithoutResult() {
          ???protected void doInCompassWithoutResult(CompassSession session)
          ?????throws CompassException {
          ????CompassHits hits = session.find("大頭人");

          ????System.out.println("Found [" + hits.getLength()
          ??????+ "] hits for [大頭人] query");
          ????System.out
          ??????.println("======================================================");
          ????for (int i = 0; i < hits.getLength(); i++) {
          ?????print(hits, i);
          ????}

          ????hits.close();
          ???}
          ??});

          ?}

          ?public static void print(CompassHits hits, int hitNumber) {
          ??Object value = hits.data(hitNumber);
          ??Resource resource = hits.resource(hitNumber);
          ??System.out.println("ALIAS [" + resource.getAlias() + "]? SCORE ["
          ????+ hits.score(hitNumber) + "]");
          ??System.out.println(":::: " + value);
          ??System.out.println("");
          ?}
          }


          19.?工具類DictionaryUtils是用來管理我們自己采用的中文分詞算法的加載自定義詞典的。
          /**
          ?* Copyright (c) 2005-2006 重慶人月科技發(fā)展有限公司
          ?*
          ?* ------------------------------------------------------------------------------
          ?* @(#) DictionaryUtils.java, 2006-8-2 下午04:55:22
          ?* ------------------------------------------------------------------------------
          ?*/
          package com.darkhe.sample.mycompass;

          import java.io.File;
          import java.io.FileNotFoundException;
          import java.io.FileReader;

          import jeasy.analysis.MMAnalyzer;

          /**
          ?*
          ?* @author darkhe
          ?* @version 1.0.0
          ?*/
          public class DictionaryUtils {
          ?// 靜態(tài)變量
          ?private static boolean isInit = false;

          ?// 靜態(tài)初始化

          ?// 靜態(tài)方法
          ?public static void loadCustomDictionary() throws FileNotFoundException {

          ??if (isInit == false) {

          ???// 添加我們自己的詞典
          ???FileReader fr = new FileReader(new File("dict.txt"));
          ???MMAnalyzer.addDictionary(fr);
          ???
          ???//System.out.println("添加我們自己的詞典");

          ???isInit = true;
          ??}
          ?}
          }
          20.?執(zhí)行Indexer,再執(zhí)行Seracher后控制臺信息如下:

          Found [1] hits for [大頭人] query
          ================================================
          ALIAS [Article] SCORE [0.3988277]
          :::: com.darkhe.sample.mycompass.Article@bla4e2


          具體結(jié)果和你的數(shù)據(jù)表中的內(nèi)容有別。

          21.?這樣,我們便實現(xiàn)了如何利用compass構(gòu)建我們自己的搜索引擎的一個簡單實現(xiàn)。

          posted on 2007-01-29 18:21 leoli 閱讀(714) 評論(0)  編輯  收藏 所屬分類: Frame

          導航

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          統(tǒng)計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案(17)

          文章分類(86)

          收藏夾(3)

          flex blog

          good site

          java blog

          my friend

          tools

          抓蝦

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 额济纳旗| 栾川县| 昌吉市| 永济市| 佛学| 丹江口市| 巨鹿县| 疏勒县| 昭苏县| 青河县| 桐梓县| 南澳县| 永吉县| 宜丰县| 阜新市| 砚山县| 太湖县| 黄大仙区| 万载县| 临漳县| 扶沟县| 克拉玛依市| 嘉义县| 柳林县| 漳平市| 富宁县| 尼勒克县| 密云县| 榆社县| 七台河市| 梁河县| 古浪县| 玛沁县| 白河县| 永德县| 新乡县| 澄江县| 从江县| 焦作市| 鄂托克前旗| 饶阳县|