spring + hibernate + struts2 + compass2.1

1导入相关包:

2.web-info中加入applicationContext-compass.xml

3.spring配置文件中加入compass支持类的引用

<bean id="productManager" class="com.v512.example.service.impl.ProductManagerImpl">

    <property name="compassTemplate" ref="compassTemplate"></property>

</bean>

4.src下加入对分词器padding文件paoding-dic-home.properties

5.在对应的pojo中加入要索引的注释

 

@Searchable

public class Test implements java.io.Serializable {

@SearchableId

    private Integer id;

@SearchableProperty(name="name")

    private String name;

@SearchableProperty(name="password")

    private String password;

@SearchableProperty(name="message")

    private String message;

6.Service中加入查询的方法,的自动生动索引的类

创建索引类

CompassIndexBuilder.java

查找的方法:

private CompassTemplate compassTemplate;

public void setCompassTemplate(CompassTemplate compassTemplate){

       this.compassTemplate=compassTemplate;

}

public List searchProducts(String queryString) {

       Compass compass = compassTemplate.getCompass();

       CompassSession session=compass.openSession();

       List list = new ArrayList();

      

       CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();

       System.out.println("queryString:"+queryString);

       System.out.println("hits:"+hits.getLength());

       for(int i=0;i<hits.length();i++){

           Product hit=(Product)hits.data(i);

           list.add(hit);

       }

      

       return list;

    }

 

创建索引类

CompassIndexBuilder.java

 

package com.v512.example.service.impl;

import org.compass.gps.CompassGps;

import org.springframework.beans.factory.InitializingBean;

 

 

/**

 * 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.

 * 会启动后延时数秒新开线程调用compassGps.index()函数.

 * 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.

 * 也可以不用本Builder, 编写手动调用compassGps.index()的代码.

 *

 */

public class CompassIndexBuilder implements InitializingBean {  

    // 是否需要建立索引,可被设置为false使本Builder失效.

    private boolean buildIndex = false;

 

    // 索引操作线程延时启动的时间,单位为秒

    private int lazyTime = 10;

 

    // Compass封装

    private CompassGps compassGps;

 

    // 索引线程

    private Thread indexThread = new Thread() {

 

        @Override

        public void run() {

            try {

                Thread.sleep(lazyTime * 1000);

                System.out.println("begin compass index...");

                long beginTime = System.currentTimeMillis();

                // 重建索引.

                // 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,

                // 索引完成后再进行覆盖.

                compassGps.index();

                long costTime = System.currentTimeMillis() - beginTime;

                System.out.println("compss index finished.");

                System.out.println("costed " + costTime + " milliseconds");

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    };

 

    /**

     * 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.

     *

     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()

     */

    public void afterPropertiesSet() throws Exception {

        if (buildIndex) {

            indexThread.setDaemon(true);

            indexThread.setName("Compass Indexer");

            indexThread.start();

        }

    }

 

    public void setBuildIndex(boolean buildIndex) {

        this.buildIndex = buildIndex;

    }

 

    public void setLazyTime(int lazyTime) {

        this.lazyTime = lazyTime;

    }

 

    public void setCompassGps(CompassGps compassGps) {

        this.compassGps = compassGps;

    }

}

 

 

applicationContext-compass.xml

 

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

 

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"

    default-lazy-init="true">

 

 

    <bean id="annotationConfiguration"

       class="org.compass.annotations.config.CompassAnnotationsConfiguration">

    </bean>

 

 

    <bean id="compass" class="org.compass.spring.LocalCompassBean">

       <property name="resourceDirectoryLocations">

           <list>

              <!-- index path -->

              <value>classpath:com/v512</value>

             

           </list>

       </property>

       <property name="connection">

           <value>/lucene/indexes</value>

       </property>

 

 

       <property name="classMappings">

           <list>

          

你可能感兴趣的:(spring,Hibernate,bean,quartz,Lucene)