Lucene是一个高性能的java搜索引擎库,可以从 Apache软件基金组织获取。 Hibernate Annotations包括一个注解包,它允许把任何域模型对象标记为可索引的, 并且对任何经由Hibernate进行持续化的实例,Hibernate 都会为之维护一个对应的Lucene索引。
首先,必须将一个持久类声明为 @Indexed:
@Entity @Indexed(index="indexes/essays") public class Essay { ... }
属性index是告诉Hibernate, Lucene索引信息所在的位置(你文件系统的某个目录)。 如果你想为所有的Lucene索引定义一个根目录,你可以在配置文件中用属性hibernate.lucene.index_dir进行配置。
Lucene索引包括四种字段:keyword 字段,text 字段,unstored字段和unindexed字段。 Hibernate注解提供了将实体属性标记为前三种被索引字段的注解。
@Entity @Indexed(index="indexes/essays") public class Essay { ... @Id @Keyword(id=true) public Long getId() { return id; } @Text(name="Abstract") public String getSummary() { return summary; } @Lob @Unstored public String getText() { return text; } }
这些注解定义了一个带有三个字段的索引: Id, Abstract 和 Text.
注意:你必须在你的实体类的标志属性上指定 @Keyword(id=true) .
用于对元素建立索引的分析器类是可以通过hibernate.lucene.analyzer属性进行配置的。 如果没有定义,则把 org.apache.lucene.analysis.standard.StandardAnalyzer作为缺省。
我们激活用于帧听三类Hibernate事件的 LuceneEventListener, 这些事件会在变更被提交至数据库后产生。
<hibernate-configuration> ... <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> </hibernate-configuration>