hibernate3.2以后,好像对lucene集成这一块多了一个项目hibernate-search,现有网上中文的配置,与这个有点出入。
现将我的配置过程记录如下:
spring中配置:
在sessionFactory的配置中加上
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
<property name="configLocation" value="classpath:config/hibernate.cfg.xml"/>
hibernate.cfg.xml配置:
<hibernate-configuration>
<session-factory name="sessionFactory">
<property name="hibernate.search.default.indexBase">/home/steven/workspace/syn-webshop/indexDir</property><!--索引存放的路径-->
<property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</property>
<event type="post-update"><listener class="com.synjones.webshop.event.ProductLuceneEventListener"/></event>
<event type="post-insert"><listener class="com.synjones.webshop.event.ProductLuceneEventListener"/></event>
<event type="post-delete"><listener class="com.synjones.webshop.event.ProductLuceneEventListener"/></event>
</session-factory>
</hibernate-configuration>
在domain的类前,
@Indexed(Index/Products)
主键加上
@DocumentId
需要索引的字段前加@Field(index=Index.TOKENIZED, store=Store.NO)
hibernate通过上面定义的listener,当要被索引的字段增删改的时候,会相应创建删除索引,有的时候,你可能不会真的删除数据库的数据,而是做了一个删除的标记,这个时候,需要重载一下定义的listener,注意,重载只有在3.0.1GA以上版本才行,因为这个版本的里面的一些方法的字段是private,在3.0.1.GA后是protected
或者自己实现PostUpdateEventListener, Initializable,接口,在配置的时候,写上自己的listener就行.