首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

基于Compass2.2与Spring 组合建立索引的实例

2012-06-26 
基于Compass2.2与Spring 结合建立索引的实例???本实例建立在ssh结构下,利用compass2.2。???1 要建立的索引

基于Compass2.2与Spring 结合建立索引的实例

???本实例建立在ssh结构下,利用compass2.2。

???1 要建立的索引类(只要是POJO的实体类就可以)

???package com.cgb.ky.resources.model;
? public class ProjectApply implements java.io.Serializable {

???private String id;

???//项目名称
? ?private String projectName="";???
? ?//申请人姓名
? ?private String realName="";???

? //国内外现状
? ?private String statusOf="";

?? //主要研究内容(研究内容提要)
? ?private String mainContent="";

?? //要达到的目标、成果形式及主要技术指标
? ?private String reachObject="";

? ?//前期工作基础
? ?private String beforeWork="";

???......???

???}

????2.建立mycompass.cmd.xml文件

?

<?xml version="1.0"?>

<!DOCTYPE compass-core-meta-data PUBLIC
??? "-//Compass/Compass Core Meta Data DTD 2.2//EN"
??? "http://www.compass-project.org/dtd/compass-core-meta-data-2.2.dtd">


<compass-core-meta-data>

? <meta-data-group id="mycompass" displayName="My Compass">
?
??? <description>Mycompass Meta Data</description>????
??? <uri>http://com/darkhe/sample/mycompass</uri>
???
??? <alias id="ProjectApply" displayName="ProjectApply">
??????? <description>ProjectApply alias</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/ProjectApply</uri>
??????? <name>ProjectApply</name>
??? </alias>

??? <meta-data id="projectName" displayName="projectName">
??????? <description>projectName</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/projectName</uri>
??????? <name>projectName</name>
??? </meta-data>
???
??? <meta-data id="projectTypeName" displayName="projectTypeName">
??????? <description>projectTypeName</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/projectTypeName</uri>
??????? <name>projectTypeName</name>
??? </meta-data>
???
??? <meta-data id="realName" displayName="realName">
??????? <description>realName</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/realName</uri>
??????? <name>realName</name>
??? </meta-data>
???
??? <meta-data id="statusOf" displayName="statusOf">
??????? <description>statusOf</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/statusOf</uri>
??????? <name>statusOf</name>
??? </meta-data>
??? <meta-data id="mainContent" displayName="mainContent">
??????? <description>mainContent</description>
??????? <uri>http://com/darkhe/sample/mycompass/alias/mainContent</uri>
??????? <name>mainContent</name>
??? </meta-data>????
???????????????
? </meta-data-group>
?
</compass-core-meta-data>

????3.建立mycompass.cpm.xml文件

?

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE compass-core-mapping PUBLIC
"-//Compass/Compass Core Mapping DTD 2.2//EN"
"http://www.compass-project.org/dtd/compass-core-mapping-2.2.dtd">
<!-- 这里的包名必须和pojo的包名一致 -->
<compass-core-mapping package="com.cgb.ky.resources.model">
<!-- 定义实体及其字段的对应关系 -->
<!-- 注意实体及其字段的名称的大小写应当与pojo对象一致,而不是与数据库一致
关于pojo与数据库的对应表的一致性关系由hibernate的映谢文件定义,而不是这个文件
当前映射文件只定义compass与hibernate的关系 -->
<class name="ProjectApply" alias="${mycompass.ProjectApply}">
<id name="id" />
<property name="projectName">
? <meta-data >${mycompass.projectName}</meta-data>
</property>
<property name="projectTypeName">
? <meta-data >${mycompass.projectTypeName}</meta-data>
</property>
<property name="realName">
? <meta-data >${mycompass.realName}</meta-data>
</property>
<property name="statusOf">
? <meta-data >${mycompass.statusOf}</meta-data>
</property>
<property name="mainContent">
? <meta-data >${mycompass.mainContent}</meta-data>
</property>
</class>
</compass-core-mapping>

4.建立mycommpass.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<compass-core-config xmlns="http://www.compass-project.org/schema/core-config"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="http://www.compass-project.org/schema/core-config
????????? http://www.compass-project.org/schema/compass-core-config-2.2.xsd">
<compass name="default">
<connection>
? <file path="target" />
</connection>
<searchEngine>
? <!-- 因是使用自己的分词算法,所以这里的类型必须是CustomAnalyzer -->
????? <analyzer name="ChineseAnalyzer" type="CustomAnalyzer" analyzer/>
??????? </stopWords>
????? </analyzer>
?????
?????
??? </searchEngine>
</compass>
</compass-core-config>
5.修改applicationContext.xml文件,添加如下内容

?? <beans xmlns="http://www.springframework.org/schema/beans"
?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
?xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
?xmlns:compass="http://www.compass-project.org/schema/spring-core-config"
?xsi:schemaLocation="http://www.springframework.org/schema/beans
?????????? http://www.springframework.org/schema/beans/spring-beans.xsd
?????????? http://www.springframework.org/schema/context
?????????? http://www.springframework.org/schema/context/spring-context-2.5.xsd
?????????? http://www.springframework.org/schema/aop
?????????? http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
?????????? http://www.springframework.org/schema/tx
?????????? http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
?????????? http://www.compass-project.org/schema/spring-core-config
?????????? http://www.compass-project.org/schema/spring-compass-core-config-2.2.xsd">

?? <!-- COMPASS START -->
??? <bean id="compass" />
??????? </property>
??? </bean>
??? <bean id="hibernateGpsDevice" /></property>
????? <property name="nativeExtractor"><bean init-method="start" destroy-method="stop">
??? <property name="compass"><ref bean="compass" /></property>
??? <property name="gpsDevices">
????? <list>
???????????? <ref bean="hibernateGpsDevice" />
????? </list>
??? </property>
? </bean>
?
??? <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->??
?? <bean id="compassIndexBuilder"?
?????? ref="compassGps" />??
??????? <property name="buildIndex" value="true" />??
??????? <property name="lazyTime" value="5" />??
?? </bean>?
? <!-- COMPASS END -->

?

???6.建立IOC.java Index.java Search.java文件如下

???IOC.java

package com.cgb.compass.index;

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

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.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);
?}
?}

index.java

package com.cgb.compass.index;


import java.io.FileNotFoundException;


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


public class Index {

?/**
? * @param args
? */
?public static void main(String[] args) throws FileNotFoundException {
??// TODO Auto-generated method stub
??// 加裁自定义词典
??//Dictionary.loadCustomDictionary();
??
??ApplicationContext context = IOC.getContext();
??// 得到spring环境中已经配置和初始化好的compassGps对象
??CompassGps compassGps = (CompassGps) context.getBean("compassGps");
??// 调用index方法建立索引
??compassGps.index();
?}

}
Search.java

package com.cgb.compass.index;

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;

import com.cgb.ky.resources.model.ProjectApply;

public class Searcher {

?/**
? * @param args
? */
?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("======================================================");
??? ProjectApply pa = new ProjectApply();
??? for (int i = 0; i < hits.getLength(); i++) {
??//? print(hits, i);
???? pa = (ProjectApply)hits.data(i);
???? System.out.println(pa.getProjectName());
??? }
??? 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("");
??}
??
}
按照以上建立,没错误后,先运行Index.java再运行search.java文件则可。

?注意的是:xml配置文件中xmlns ,xsi:schemaLocation等引用要准确,不然会报错。

热点排行