我们刚刚发布了 Hibernate Search 6.0.0.Beta8。
这个版本主要增加了对搜索查询中实体图的支持,并将 @Indexed
改为默认继承。它还包括将 Lucene 升级到 8.5.2,Elasticsearch 升级到 7.7.0 和 Hibernate ORM 升级到 5.4.17.Final。
新特性
搜索查询中的更精细加载选项
从 HSEARCH-3628 开始,可以将实体图传递给搜索查询以控制将预加载的关联。
@Entity
@Indexed
@NamedEntityGraph(
name = "preload-associates",
attributeNodes = @NamedAttributeNode("associates")
)
public class Manager {
@Id
private Integer id;
@FullTextField(analyzer = "name", projectable = Projectable.YES)
private String name;
@OneToMany // The association's fetch type is lazy by default.
@OrderColumn
private List<Associate> associates = new ArrayList<>();
// ...
}
List<Manager> hits = Search.session( entityManager ).search( Manager.class )
.where( f -> f.match()
.field( "name" )
.matching( "james" ) )
.loading( o -> o.graph( "preload-associates", GraphSemantic.FETCH ) )
.fetchHits( 20 );
for ( Manager manager : hits ) {
// This does not trigger a SELECT: the association was eagerly loaded.
List<Associate> associates = manager.getAssociates();
// ...
}
有关更多信息,请参阅 本节文档。
@Indexed
现在默认继承
从 HSEARCH-1231 开始,一旦实体被 @Indexed
标记,其所有扩展实体也将默认索引。这种行为应该不会让新用户感到惊讶。
如果您确实需要索引一个实体,而不是其扩展实体之一,您可以手动使用@Indexed(enabled = false)
禁用扩展实体的索引。
有关更多信息,请参阅文档中的该部分。
版本升级
-
HSEARCH-3930:升级到Lucene 8.5.2
-
HSEARCH-3918:升级到Elasticsearch 7.7.0
-
HSEARCH-3932:升级到Hibernate ORM 5.4.17.Final
Hibernate Search 6需要ORM 5.4.4.Final或更高版本才能正确工作。早期的5.4.x版本将无法正确工作。 |
不兼容的更改
-
HSEARCH-3922:API方法不再使用“get”/“set”前缀。例如,
SearchResult.getHits()
现在简单为SearchResult.hits()
。目前仍然提供具有“get”/“set”前缀的旧版本方法,但已被弃用,将在Hibernate Search 6.0.0.Final发布之前删除。 -
HSEARCH-3097:
@IndexedEmbedded.name
应替换@IndexedEmbedded.prefix
。主要区别在于name
不接受点分隔的路径、前缀或空路径:它仅定义对象字段的名称。@IndexedEmbedded.prefix
目前仍然可用,但已被弃用,将在未来的主要版本中删除。 -
HSEARCH-3913:
@FullTextField.aggregable
已被删除,因为它没有任何作用。如果需要在给定属性上同时进行全文搜索和排序/聚合,请创建两个字段:一个具有@FullTextField(analyzer = …)
,另一个具有@KeywordField(sortable = Sortable.YES, aggregable = Aggregable.YES)
。 -
HSEARCH-3928:
PropertyMappingIndexedEmbeddedStep#extractors()
(无参数)已重命名为noExtractors()
。
其他改进和错误修复
-
HSEARCH-3072:
@IndexedEmbedded.targetType
现在可用,与Hibernate Search 5中的targetElement
具有类似的功能。 -
HSEARCH-962:现在将执行多个查询来执行实体加载,即使文档ID映射到不是实体ID的属性,也会尊重配置的fetch大小。这将允许绕过某些数据库的限制,这些数据库对查询参数的总数有限制。
-
HSEARCH-3584:当启用“扩展”字节码增强(替换对公共字段的访问)时,Hibernate Search现在将正确检索在映射超类或实体超类中定义的属性中的数据。
等等。有关自上次发布以来的所有更改的完整列表,请参阅发行说明。
如何获取此版本
所有详细信息都可在hibernate.org上的专门页面中找到,并保持最新。