`
foxxiao
  • 浏览: 105340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Spring的Hibernate Search全文检索功能示例

阅读更多
数据库:Oracle 9i
JDBC驱动:OJDBC14
开发环境:Eclipse-JEE
Spring版本:Spring 2.0.6
Hibernate版本:Hibernate Core 3.2.5/Hibernate Annotation 3.3.0/Hibernate Validator 3.0.0/Hibernate Search 3.0.0 Beta4

//jdbc.properties(JDBC配置文件)
Java代码
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver   
jdbc.url=jdbc:oracle:thin:@192.168.0.3:1521:itone   
jdbc.username=test   
jdbc.password=test  

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.0.3:1521:itone
jdbc.username=test
jdbc.password=test

//hibernate.properties(Hibernate配置文件)
Java代码
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect   
hibernate.show_sql=false  
hibernate.cache.use_query_cache=true  
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider   
hibernate.hbm2ddl.auto=update   
######以下是Hibernate Search的简单配置######  
hibernate.search.default.directory_provider=org.hibernate.search.store.FSDirectoryProvider  
hibernate.search.default.indexBase=E:/indexes 

hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.show_sql=false
hibernate.cache.use_query_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.hbm2ddl.auto=update
######以下是Hibernate Search的简单配置######
hibernate.search.default.directory_provider=org.hibernate.search.store.FSDirectoryProvider
hibernate.search.default.indexBase=E:/indexes


//Foo.java(Hibernate POJO文件)
Java代码
@Entity 
@Table(name = "search_foo")  
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)  
@Indexed(index = "search_foo")  
public class Foo implements Serializable {  
 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO)  
@DocumentId 
private Integer id;  
 
@Column(nullable = false, length = 256)  
@Field(name = "name", index = Index.TOKENIZED, store = Store.YES)  
private String name;  
 
@Lob 
@Field(name = "content", index = Index.TOKENIZED, store = Store.YES)  
private String content;  
 
@Column(name = "post_time", nullable = false)  
@DateBridge(resolution = Resolution.DAY)  
private Calendar postTime;  
 
public Integer getId() {  
     return id;  
}  
 
public void setId(Integer id) {  
     this.id = id;  
}  
 
public String getName() {  
     return name;  
}  
 
public void setName(String name) {  
     this.name = name;  
}  
 
public String getContent() {  
     return content;  
}  
 
public void setContent(String content) {  
     this.content = content;  
}  
 
public Calendar getPostTime() {  
     return postTime;  
}  
 
public void setPostTime(Calendar postTime) {  
     this.postTime = postTime;  
}  


@Entity
@Table(name = "search_foo")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Indexed(index = "search_foo")
public class Foo implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@DocumentId
private Integer id;

@Column(nullable = false, length = 256)
@Field(name = "name", index = Index.TOKENIZED, store = Store.YES)
private String name;

@Lob
@Field(name = "content", index = Index.TOKENIZED, store = Store.YES)
private String content;

@Column(name = "post_time", nullable = false)
@DateBridge(resolution = Resolution.DAY)
private Calendar postTime;

public Integer getId() {
     return id;
}

public void setId(Integer id) {
     this.id = id;
}

public String getName() {
     return name;
}

public void setName(String name) {
     this.name = name;
}

public String getContent() {
     return content;
}

public void setContent(String content) {
     this.content = content;
}

public Calendar getPostTime() {
     return postTime;
}

public void setPostTime(Calendar postTime) {
     this.postTime = postTime;
}
}

//hibernate.cfg.xml(Hibernate配置文件)
Xml代码
<?xml version="1.0"?> 
<!DOCTYPE hibernate-configuration PUBLIC  
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
 
<hibernate-configuration> 
<session-factory> 
 
     <mapping class="com.itone.search.pojo.Foo"/> 
    
</session-factory> 
 
</hibernate-configuration> 

<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

     <mapping class="com.itone.search.pojo.Foo"/>
 
</session-factory>

</hibernate-configuration>


//applicationContext-conf.xml(加载.properties文件的配置文件)
Xml代码
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  
<beans default-autowire="byName">  
  
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false">  
     <property name="locations">  
      <list>  
       <value>classpath*:jdbc.properties</value>  
       <value>classpath*:hibernate.properties</value>  
      </list>  
     </property>  
</bean>  
  
</beans>  

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

<beans default-autowire="byName">

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false">
     <property name="locations">
      <list>
       <value>classpath*:jdbc.properties</value>
       <value>classpath*:hibernate.properties</value>
      </list>
     </property>
</bean>

</beans>



//applicationContext-database.xml(数据源及SessionFactory定义文件)
Xml代码
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  
<beans default-autowire="byName">  
  
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
     <property name="driverClassName" value="${jdbc.driverClassName}"/>  
     <property name="url" value="${jdbc.url}"/>  
     <property name="username" value="${jdbc.username}"/>  
     <property name="password" value="${jdbc.password}"/>  
</bean>  
  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
     <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>  
     <property name="configLocation" value="/WEB-INF/classes/hibernate.cfg.xml"/>  
     <property name="hibernateProperties">  
      <props>  
       <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
       <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>  
       <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>  
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  
       
       <prop key="hibernate.search.default.directory_provider">${hibernate.search.default.directory_provider}</prop>  
       <prop key="hibernate.search.default.indexBase">${hibernate.search.default.indexBase}</prop>  
      </props>  
     </property>  
</bean>  
  
<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator"/>  
  
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"/>  
  
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"/>  
  
</beans>  

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

<beans default-autowire="byName">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
     <property name="driverClassName" value="${jdbc.driverClassName}"/>
     <property name="url" value="${jdbc.url}"/>
     <property name="username" value="${jdbc.username}"/>
     <property name="password" value="${jdbc.password}"/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
     <property name="configLocation" value="/WEB-INF/classes/hibernate.cfg.xml"/>
     <property name="hibernateProperties">
      <props>
       <prop key="hibernate.dialect">${hibernate.dialect}</prop>
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
       <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
       <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
    
       <prop key="hibernate.search.default.directory_provider">${hibernate.search.default.directory_provider}</prop>
       <prop key="hibernate.search.default.indexBase">${hibernate.search.default.indexBase}</prop>
      </props>
     </property>
</bean>

<bean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator"/>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"/>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"/>

</beans>


//applicationContext-manager.xml(Manager定义文件) 
Xml代码 
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  
<beans default-autowire="byName">  
  
<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  
     <property name="proxyTargetClass" value="true"/>  
           <property name="transactionAttributes">  
      <props>  
       <prop key="*">PROPAGATION_REQUIRED</prop>  
      </props>  
     </property>  
</bean>  
  
<!-- Authentication manager for login and role checking -->  
<bean id="fooManager" parent="baseTxService">  
     <property name="target">  
      <bean class="com.itone.search.manager.FooManager"/>  
     </property>  
</bean>  
  
</beans>  

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

<beans default-autowire="byName">

<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
     <property name="proxyTargetClass" value="true"/>
           <property name="transactionAttributes">
      <props>
       <prop key="*">PROPAGATION_REQUIRED</prop>
      </props>
     </property>
</bean>

<!-- Authentication manager for login and role checking -->
<bean id="fooManager" parent="baseTxService">
     <property name="target">
      <bean class="com.itone.search.manager.FooManager"/>
     </property>
</bean>

</beans>


//SpringMVC、Log4j、EHCache配置略

//FooManager.java(做全文检索示例)
Java代码
package com.itone.search.manager;   
  
import java.util.List;   
  
import org.apache.lucene.analysis.StopAnalyzer;   
import org.apache.lucene.queryParser.QueryParser;   
import org.apache.lucene.search.Query;   
import org.hibernate.search.FullTextQuery;   
import org.hibernate.search.FullTextSession;   
  
import com.itone.search.pojo.Foo;   
  
public class FooManager extends BaseManager<Foo> {   
  
@SuppressWarnings("unchecked")   
public void testQuery() throws Exception {   
     QueryParser parser = new QueryParser("name", new StopAnalyzer());   
     Query luceneQuery = parser.parse("name:Jack");   
     FullTextSession s = Search.createFullTextSession(getSession());   
     FullTextQuery query = s.createFullTextQuery(luceneQuery, Foo.class);   
     List<Foo> result = query.list();   
     for(Foo f : result) {   
      System.out.println("ID:" + f.getId());   
      System.out.println("NAME:" + f.getName());   
      System.out.println("CONTENT:" + f.getContent());   
      System.out.println("POSTTIME:" + f.getPostTime());   
     }   
}   
}  
分享到:
评论

相关推荐

    Spring面试题

    ☆ Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象...

    spring-boot-hibernate:最初的

    Hibernate,Spring Data JPA)问候世界在此示例中,没有web.xml,没有Spring xml配置文件,没有persistence.xml,没有* .hbm.xml,只是没有XML配置文件,该文件从数据库中检索数据并以JSON格式返回它们。 该项目使用...

    RESTful-AngularJS-Spring-JPA-Hibernate:AngularJS,Spring 4 RESTful,JPA2,用于公司管理应用程序(CMA)的Hibernate示例应用程序简化了解决方案

    这是一个使用AngularJS,Java 8,Spring 4 MVC,JPA2,Hibernate,Maven,Git,GitHub和Heroku创建的非常简单的Web应用程序。 它提供RESTful服务来创建,更新和查看单个公司及其各自所有者,还提供检索和列出存储在...

    springmybatis

    MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm...

    java-entitymanager-generic-dao:使用 Hibernate EntityManager (Spring Boot) 的通用 Dao

    在这个实现中,我们使用 Spring Framework ORM EntityManager 使用预配置的数据源来实现基本操作,例如从数据库中插入、更新、删除和检索实体。 这种实现的主要优点是,由于这个 dao 是使用 Java 泛型实现的,我们...

    specification-pattern-example:一个如何在Java中实现规范模式的示例

    规范模式示例 一个如何在Java中实现规范模式的示例 规范模式-这是什么? 规范对象表示给定类型的对象应满足的条件。 规范必须实现检查对象是否满足预期条件的方法isSatisfiedBy(Object o) 。 当从存储库(具有简化...

    javiermoreno-domina-springboot:Sprint Boot

    ###功能已完成: 100%无xml且充满糖 与ssl集成 无会话休息Web服务 用户/密码认证 令牌认证(检查ip和ttl) 发布用utf-8编码的静态文件的示例 服务方法级别的全局授权示例 向控制器传递参数的示例(路径,查询,...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics