7.3.3. 添加注解
对于本节,请考虑您拥有包含图书详细信息的数据库的示例。您的应用包含 Hibernate 管理的类 example.Book
和 example.Author
,您想要为您的应用添加免费文本搜索功能以启用搜索图书。
示例:在添加 Hibernate 搜索特定注释前实体书和授权
要达到此目的,您必须向 Book 和 Author 类添加一些注释。第一个注释 @Indexed 将 Book
标记为可索引。按照设计,Hibernate Search 在索引中存储一个未描述的 ID,以确保给定实体的索引不可变。@DocumentId
标记用于此目的的属性,并且在大多数情况下与数据库主密钥相同。如果存在 @Id 注释,则
注释是可选的。
@Document
Id
接下来,您要使可搜索的字段必须标记为。在本例中,以标题 和副
标题
开头,并以@Field
标注。参数 index=Index.YES
将确保对文本进行索引,而 analyze=Analyze.YES
则确保将使用默认的 Lucene 分析器分析文本。通常,分析意味着将句子划分为单个单词,并可能排除诸如 "a"或.
“”我们稍后将深入探讨分析器。我们在 @Field
(storage=Store.NO
)中指定的第三个参数确保实际数据不会存储在索引中。此数据存储在索引中是否与搜索它的能力无关。从 Lucene 的角度来看,在索引创建后不需要保留数据。存储它的好处是能够通过预测来检索。
如果不进行预测,Hibernate Search 默认为执行 Lucene 查询,以查找符合查询条件的实体的数据库标识符,并使用这些标识符从数据库中检索受管对象。对预测或预测的决定必须逐例做出。建议使用默认行为,因为它返回受管对象,而 仅返回对象数组。请注意,index=Index.YES
,analyze=Analyze.YES
和 store=Store.NO
是这些参数的默认值,可以省略。
尚未讨论的另一个注释是 @DateBridge
。此注释是 Hibernate Search 中的内置字段桥之一。Lucene 索引纯粹基于字符串。因此,Hibernate Search 必须将索引字段的数据类型转换为字符串,反之亦然。提供了一系列预定义的网桥,包括 DateBridge,它使用指定的解析将 java.util.Date 转换为字符串。如需了解更多详细信息,请参阅网桥。
这将为我们保留 @IndexedEmbedded
。此注释用于为所属实体(@ManyToMany
、@*ToOne
、@Embedded
和 @ElementCollection
)索引关联实体。这是必要的,因为 Lucene 索引文档是一个扁平数据结构,它不知道对象关系。为确保作者姓名可以搜索,您必须确保将姓名作为本书本身的一部分进行索引。在 @IndexedEmbedded
的顶部,您还必须标记您希望在 @Indexed
索引中包含的关联实体的所有字段。如需了解更多详细信息,请参阅嵌入式对象和关联对象。
这些设置现在应该已足够。有关实体映射的详情,请参阅映射实体。
示例:添加 Hibernate 搜索注解后的实体