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


我就是一个快乐的程序员~
 
查看文章
         
基于Spring的Hibernate Search全文检索功能示例
2007-08-23 19:27

数据库: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配置文件)
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配置文件)
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

     
java 代码
 
  1. //Foo.java(Hibernate POJO文件)  
  2. @Entity  
  3. @Table(name = "search_foo")  
  4. @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)  
  5. @Indexed(index = "search_foo")  
  6. public class Foo implements Serializable {  
  7.   
  8. @Id  
  9. @GeneratedValue(strategy = GenerationType.AUTO)  
  10. @DocumentId  
  11. private Integer id;  
  12.   
  13. @Column(nullable = false, length = 256)  
  14. @Field(name = "name", index = Index.TOKENIZED, store = Store.YES)  
  15. private String name;  
  16.   
  17. @Lob  
  18. @Field(name = "content", index = Index.TOKENIZED, store = Store.YES)  
  19. private String content;  
  20.   
  21. @Column(name = "post_time", nullable = false)  
  22. @DateBridge(resolution = Resolution.DAY)  
  23. private Calendar postTime;  
  24.   
  25. public Integer getId() {  
  26.      return id;  
  27. }  
  28.   
  29. public void setId(Integer id) {  
  30.      this.id = id;  
  31. }  
  32.   
  33. public String getName() {  
  34.      return name;  
  35. }  
  36.   
  37. public void setName(String name) {  
  38.      this.name = name;  
  39. }  
  40.   
  41. public String getContent() {  
  42.      return content;  
  43. }  
  44.   
  45. public void setContent(String content) {  
  46.      this.content = content;  
  47. }  
  48.   
  49. public Calendar getPostTime() {  
  50.      return postTime;  
  51. }  
  52.   
  53. public void setPostTime(Calendar postTime) {  
  54.      this.postTime = postTime;  
  55. }  
  56. }  

代码
 
  1. //hibernate.cfg.xml(Hibernate配置文件)  
  2. version="1.0"?>  
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5.   
  6. &lthibernate-configuration>  
  7. &ltsession-factory>  
  8.   
  9.      &ltmapping class="com.itone.search.pojo.Foo"/>  
  10.     
  11. >  
  12.   
  13. >  
  14.   
  15. //applicationContext-conf.xml(加载.properties文件的配置文件)  
  16. version="1.0" encoding="UTF-8"?>  
  17. >  
  18.   
  19. &ltbeans default-autowire="byName">  
  20.   
  21. &ltbean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false">  
  22.      &ltproperty name="locations">  
  23.       &ltlist>  
  24.        &ltvalue>classpath*:jdbc.properties>  
  25.        &ltvalue>classpath*:hibernate.properties>  
  26.       >  
  27.      >  
  28. >  
  29.   
  30. >  

代码
 
  1. //applicationContext-database.xml(数据源及SessionFactory定义文件)  
  2. "1.0" encoding="UTF-8"?>  
  3. "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  4.   
  5. &ltbeans default-autowire="byName">  
  6.   
  7. &ltbean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  8.      &ltproperty name="driverClassName" value="${jdbc.driverClassName}"/>  
  9.      &ltproperty name="url" value="${jdbc.url}"/>  
  10.      &ltproperty name="username" value="${jdbc.username}"/>  
  11.      &ltproperty name="password" value="${jdbc.password}"/>  
  12.   
  13.   
  14. &ltbean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  15.      &ltproperty name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>  
  16.      &ltproperty name="configLocation" value="/WEB-INF/classes/hibernate.cfg.xml"/>  
  17.      &ltproperty name="hibernateProperties">  
  18.       &ltprops>  
  19.        &ltprop key="hibernate.dialect">${hibernate.dialect}  
  20.        &ltprop key="hibernate.show_sql">${hibernate.show_sql}  
  21.        &ltprop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}  
  22.        &ltprop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}  
  23.        &ltprop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}  
  24.       
  25.        &ltprop key="hibernate.search.default.directory_provider">${hibernate.search.default.directory_provider}  
  26.        &ltprop key="hibernate.search.default.indexBase">${hibernate.search.default.indexBase}  
  27.         
  28.        
  29.   
  30.   
  31. &ltbean id="jdbcExceptionTranslator" class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator"/>  
  32.   
  33. &ltbean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"/>  
  34.   
  35. &ltbean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"/>  
  36.   
  37.   

xml 代码
 
  1. //applicationContext-manager.xml(Manager定义文件)  
  2. version="1.0" encoding="UTF-8"?>  
  3. >  
  4.   
  5. &ltbeans default-autowire="byName">  
  6.   
  7. &ltbean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  
  8.      &ltproperty name="proxyTargetClass" value="true"/>  
  9.            &ltproperty name="transactionAttributes">  
  10.       &ltprops>  
  11.        &ltprop key="*">PROPAGATION_REQUIRED>  
  12.       >  
  13.      >  
  14. >  
  15.   
  16. >  
  17. &ltbean id="fooManager" parent="baseTxService">  
  18.      &ltproperty name="target">  
  19.       &ltbean class="com.itone.search.manager.FooManager"/>  
  20.      >  
  21. >  
  22.   
  23. >  

java 代码
 
  1. /SpringMVC、Log4j、EHCache配置略  
  2.   
  3. //FooManager.java(做全文检索示例)  
  4. package com.itone.search.manager;  
  5.   
  6. import java.util.List;  
  7.   
  8. import org.apache.lucene.analysis.StopAnalyzer;  
  9. import org.apache.lucene.queryParser.QueryParser;  
  10. import org.apache.lucene.search.Query;  
  11. import org.hibernate.search.FullTextQuery;  
  12. import org.hibernate.search.FullTextSession;  
  13.   
  14. import com.itone.search.pojo.Foo;  
  15.   
  16. public class FooManager extends BaseManager&ltFoo> {  
  17.   
  18. @SuppressWarnings("unchecked")  
  19. public void testQuery() throws Exception {  
  20.      QueryParser parser = new QueryParser("name"new StopAnalyzer());  
  21.      Query luceneQuery = parser.parse("name:Jack");  
  22.      FullTextSession s = Search.createFullTextSession(getSession());  
  23.      FullTextQuery query = s.createFullTextQuery(luceneQuery, Foo.class);  
  24.      List&ltFoo> result = query.list();  
  25.      for(Foo f : result) {  
  26.       System.out.println("ID:" + f.getId());  
  27.       System.out.println("NAME:" + f.getName());  
  28.       System.out.println("CONTENT:" + f.getContent());  
  29.       System.out.println("POSTTIME:" + f.getPostTime());  
  30.      }  
  31. }  
  32. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值