国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
利用Compass實(shí)現(xiàn)一個(gè)簡(jiǎn)單的搜索引擎[轉(zhuǎn)貼]
Compass是一流的開(kāi)放源碼JAVA搜索引擎框架,對(duì)于你的應(yīng)用修飾,搜索引擎語(yǔ)義更具有能力。依靠頂級(jí)的Lucene搜索引擎,Compass 結(jié)合了,像 Hibernate和 Sprin的流行的框架,為你的應(yīng)用提供了從數(shù)據(jù)模型和數(shù)據(jù)源同步改變的搜索力.并且添加了2方面的特征,事物管理和快速更新優(yōu)化. Compass的目標(biāo)是:把java應(yīng)用簡(jiǎn)單集成到搜索引擎中.編碼更少,查找數(shù)據(jù)更便捷。

  下面以一個(gè)應(yīng)用場(chǎng)景分步驟講解如何利用compass實(shí)現(xiàn)搜索引擎:

1. 這里我們有一個(gè)Article表,希望利用compass實(shí)現(xiàn)對(duì)它的搜索。

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對(duì)它的ArticleTitle、Summary、Content和KeyList進(jìn)行全文檢索。下面開(kāi)始行動(dòng)吧。

2. 首先到http://www.opensymphony.com/compass/download.action 上下載一個(gè)compass的發(fā)布版,我們下載的是Version 1.0.0的With Dependencies 。這樣就可能省去尋找相關(guān)信賴庫(kù)的麻煩了。

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

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

5. 首先我們?cè)趀clipse中建立了一個(gè)java工程,名為mycompass。

6. 然后我們?cè)诠こ棠夸浿薪⒘艘粋€(gè)lib目錄,用來(lái)存放本次工程所需要的所有compass和其它相關(guān)的庫(kù)文件,并將他們?cè)O(shè)置為當(dāng)前工程構(gòu)建路徑中需要的庫(kù)文件。所有這些文件可以在compass的安裝目錄的lib目錄找到。

下面是我們的庫(kù)文件列表:

7. 建立了Article表的pojo類。

CODE:

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;
  }

}


[Copy to clipboard]

8. 建立hibernate的pojo到數(shù)據(jù)表映射文件

CODE:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"[url]http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd[/url]">
<!-- 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>


[Copy to clipboard]

9. 開(kāi)始配置compass,首先是compass的系統(tǒng)配置文件 mycompass.cfg.xml

CODE:

<?xml version="1.0" encoding="UTF-8"?>
<compass-core-config
xmlns="[url]http://www.opensymphony.com/compass/schema/core-config[/url]"
xmlns:xsi="[url]http://www.w3.org/2001/XMLSchema-instance[/url]"
xsi:schemaLocation="[url]http://www.opensymphony.com/compass/schema/core-config[/url]
      [url]http://www.opensymphony.com/compass/schema/compass-core-config.xsd[/url]">

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

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

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

</compass>
</compass-core-config>

[Copy to clipboard]

在上面的配置中,我們使用的我們選用的一個(gè)中文分詞算法庫(kù),你可以用compass自帶的。具體compass提供了哪些分詞算法,請(qǐng)查閱compass的手冊(cè)。


10. 然后是mycompass.cmd.xml

CODE:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE compass-core-meta-data PUBLIC
  "-//Compass/Compass Core Meta Data DTD 1.0//EN"
  "[url]http://www.opensymphony.com/compass/dtd/compass-core-meta-data.dtd[/url]">

<compass-core-meta-data>

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

    <meta-data id="KeyList" displayName="KeyList">
        <description>KeyList</description>
        <uri>[url]http://com/darkhe/sample/mycompass/alias/KeyList</uri>[/url]
        <name>KeyList</name>
    </meta-data>    
               
  </meta-data-group>
 
</compass-core-meta-data>

[Copy to clipboard]


11. 再是mycompass.cpm.xml

CODE:

<?xml version="1.0" encoding="UTF-8"?>
<!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]">

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

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

<!-- 注意實(shí)體及其字段的名稱的大小寫(xiě)應(yīng)當(dāng)與pojo對(duì)象一致,而不是與數(shù)據(jù)庫(kù)一致
關(guān)于pojo與數(shù)據(jù)庫(kù)的對(duì)應(yīng)表的一致性關(guān)系由hibernate的映謝文件定義,而不是這個(gè)文件
當(dāng)前映射文件只定義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>


[Copy to clipboard]

12. log4j.properties

CODE:

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

[Copy to clipboard]


13. jdbc.properties

CODE:

# 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

[Copy to clipboard]


14. 最后是applicationContext-hibernate.xml,這里集中配置了compass如何與spring與hibernate結(jié)合的。

CODE:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "[url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">

<!--
- 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所需要的兩個(gè)關(guān)于數(shù)據(jù)項(xiàng)的配置文件 -->
  <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>

[Copy to clipboard]

15. 注意上面的所以配置文件,根據(jù)我們上面的配置,都應(yīng)當(dāng)放到classpath的根路徑。
16. 建立工具類,用來(lái)進(jìn)行spring引擎的初始化工作。

CODE:

/**
* <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);
}

}


[Copy to clipboard]

17. 建立索引程序,用來(lái)數(shù)據(jù)庫(kù)中的建立索引

CODE:

/*
* 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對(duì)象
CompassGps compassGps = (CompassGps) context.getBean("compassGps");
// 調(diào)用index方法建立索引
compassGps.index();

}

}

[Copy to clipboard]


18. 建立搜索程序,檢證compass的應(yīng)用。

CODE:

/*
* 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("");
}
}


[Copy to clipboard]


19. 工具類DictionaryUtils是用來(lái)管理我們自己采用的中文分詞算法的加載自定義詞典的。

CODE:

/**
* 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;
}
}
}

[Copy to clipboard]

20. 執(zhí)行Indexer,再執(zhí)行Seracher后控制臺(tái)信息如下:

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


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

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

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Compass讀文檔筆記
用compass實(shí)現(xiàn)站內(nèi)全文搜索引擎(二) - Miss - JavaEye技術(shù)網(wǎng)站
英語(yǔ)六級(jí)翻譯:指南針
jeep  compass
【秘密(吸引力法則)】秘密三:The Compass
美麗的星期四,祝您好心情!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服