Lucene+hibernate+spring配置心得

66 篇文章 1 订阅
需要准备的包: hibernate3.2.0.jar hibernate-annotations.jar ejb3-persistence.jar lucene-core-2.0.0.jar spring1.2.6.jar 基本上值得注意的包就这些了,如果你有用ehcache做hibernate的cache,那么你需要 使用ehcache-1.2.1版本的jar包。 ejb3-persistence.jar包可以在hibernate-annotations的下载包中找到 关于hibernate的配置: <!DOCTYPE hibernate-configuration PUBLIC  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  " http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd "> <hibernate-configuration>  <session-factory name="sessionFactory">   <property name=" hibernate.lucene.index_dir ">/indexDir</property>   <property     name=" hibernate.lucene.analyzer ">org.apache.lucene.analysis.standard.StandardAnalyzer</property>   <event type=" post-commit-update ">    <listener class="org.hibernate.lucene.event.LuceneEventListener"/>   </event>   <event type=" post-commit-insert ">    <listener  class="org.hibernate.lucene.event.LuceneEventListener"/>   </event>   <event type=" post-commit-delete " >    <listener class="org.hibernate.lucene.event.LuceneEventListener"/>   </event>  </session-factory>   </hibernate-configuration> hibernate.lucene.analyzer 这是为lucene指定一个分词器 这两项不是必须配置的,但是配置了以后,省去许多麻烦 post-commit-update,post-commit-insert,post-commit-delete 为hibernate这3种状态指定监听器。hibernate正是透过这3个状态的监听,来更新lucene索引的   hibernate.lucene.index_dir: 这是为lucene指定一个index目录(可以给绝对路径,因为我是linux系统,所以没有盘符),当然仅对hibernate有效,如果你跳过hibernate直接操作 lucene,这个目录是没有用的 Spring下的配置: <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   <property name="dataSource"><ref local="dataSource"/></property>   <property name="mappingResources">     <list>     <value>FaqMessage.hbm.xml</value>    </list>   </property>   <property name="hibernateProperties">    <props>     <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>                 <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>     <prop key="hibernate.connection.release_mode">on_close</prop>     <prop key="hibernate.show_sql">true</prop>     <prop key="hibernate.connection.autocommit">false</prop>    </props>   </property>    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>   <property name="configLocation" value="classpath:hibernate.cfg.xml"/>     </bean> 熟悉spring+hibernate的人应该都对这个配置不陌生,值得注意的是最后两项,一定要配。 定义hibernate实体 @Indexed(index="/FaqIndex") public class Faq extends BaseFaq {    private static final long serialVersionUID = 1L;  private int id;  private String subject;  private String messageContent;   @Keyword(id=true)     public int getId() {         return this.id;     }     @Text(name="subject")    public String getSubject() {   return subject;  }    public void setSubject(String subject) {   this.subject = subject;  }   @Unstored(name="message")     public String getMessageContent() {         return this.messageContent;     }   } 首先讲一下hibernate这四种annotation类型 @Indexed(index="//FaqIndex") 这个类型指定了你的实体在写入Lucene indexer的时的路径,如果你之前配置了hibernate.lucene.index_dir, 则相对路径是对hibernate.lucene.index_dir的相对路径,也就是说,"//FaqIndex"这个文件夹,是放在hibernate.lucene.index_dir下的子文件夹 并且,需要注意的是,如果你将index的路径指为"/",则他访问的是hibernate.lucene.index_dir这个文件夹, 如果你没有在hibernate.lucene.index_dir事先建立起任何索引,他是追加不进去的. @Keyword(id=true) 基本上,你需要将hibernate实体的Id 声明为lucene field的Keyword类型,并且将id=true,没有办法,hibernte永远是靠id来找实体的,现在跟lucene做配合,也是靠的id, field名称会是"Id".    @Text(name="subject")      public String getMessageSubject() {         return super.getMessageSubject();     } 这段是将messageSubject属性声明成名字为"subject",类型为Text的field  @Unstored(name="message")     public String getMessageContent() {         return this.messageContent;     }   } 这段是将messageContent属性声明成名字为"message",类型为Unstored的field ( 基本上到次,所有的配置就完成了. 每次做update,save,delete的时候,hibernate会自动更新lucence的索引, 而不用写hibernate拦截器那么痛苦了. 基本上hibernate的 annotations for lucene这一块就是为了解决lucene的索引更新问题了 上文参考了hibernate官方的配置方法,但是如果完全按照官方的配置方法,根本是配置不起来的, 所以写下此文,希望能给大家一点指引 此文仅仅介绍了配置,如果大家想了解lucene的实际用法,我过段时间,会举一个实例,来解释lucene2.0的 用法. 当然你可以去当当网( http://www.dangdang.com )定购<Ajax+lucene>这本书,只是里面介绍的是
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值