Hibernate Search 4.1.0.Beta2 已发布,包含一个非常有趣的改进:现在可以通过使用 @IndexedEmbedded 精确表达要索引的路径。
之前,在使用 @IndexedEmbedded 时,我们会遍历实体图到指定的深度以索引所有遍历的分支。我们会将所有路径索引到相同的深度,直到达到指定的最大深度或遇到更小的深度值。在复杂模型中,控制确切要索引的内容可能变得复杂。
在论坛上,遇到这个问题的 Zach Kurey 问我 只是出于好奇
为什么我们不提供一个显式的要包含的路径选项。 当然
,他写道,肯定有原因
。说实话,没有原因:我们只是没想过。
所以,如果你有建议,不要认为我们知道的更好。联系我们!我们的角色是保护代码质量并催化众多聪明用户的经验:我们需要您的反馈来继续改进。
经过 关于 API 和实现细节的长期讨论,本版本使新的 @IndexedEmbedded(includePaths) 功能对所有人可用。感谢 Zach 和 Davide D'Alto,因为他们在贡献设计后还提供了补丁和测试,使这个绝妙的主意对所有人都可用。
它是如何工作的?
在以下 索引实体 中,我们声明在索引每个 人员 时,我们希望索引 姓名 和 姓氏 字段,以及其 父母 字段,通过使用众所周知的 @IndexedEmbedded 注解。
@Entity
@Indexed
public class Person {
@Id
public int id;
@Field
public String name;
@Field
public String surname;
@OneToMany
@IndexedEmbedded(includePaths = { "name" })
public Set<Person> parents;
@ContainedIn
@ManyToOne
public Person child;
...//other fields omitted
}
这条新闻是注解的 includePaths 属性,它指出我们不想递归地索引父 人员 的所有字段,而只想索引其 姓名 字段。
这是一个非常简单的示例;参考文档包含了更多示例和细节,请参阅这里。简而言之,它提供了更好的控制,可以确定哪些字段将被索引,避免了索引不必要的对象。当然这可以提高整体性能。
Hibernate Search 4.1.0.Beta2 等你来体验!
当然,这个版本还包含了一些错误修复和改进,更多详情请查看发行说明。