Hibernate Search 是一个库,通过自动索引实体,将 Hibernate ORM 与 Apache Lucene 或 Elasticsearch 集成,启用高级搜索功能:全文搜索、地理空间搜索、聚合等。更多信息,请参阅 hibernate.org 上的 Hibernate Search。

我们刚刚发布了 Hibernate Search 6.0.0.Beta8。

这个版本主要增加了对搜索查询中实体图的支持,并将 @Indexed 改为默认继承。它还包括将 Lucene 升级到 8.5.2,Elasticsearch 升级到 7.7.0 和 Hibernate ORM 升级到 5.4.17.Final。

开始使用 Hibernate Search 6

如果您想直接进入新的、令人耳目一新的 Hibernate Search 6,参考文档中的 入门指南 是一个好的起点。

Hibernate Search 6 API 与 Hibernate Search 5 有显著差异。

有关迁移和我们将如何帮助您的更多信息,请参阅 迁移指南

新特性

搜索查询中的更精细加载选项

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)禁用扩展实体的索引。

有关更多信息,请参阅文档中的该部分

版本升级

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-3928PropertyMappingIndexedEmbeddedStep#extractors()(无参数)已重命名为noExtractors()

文档

除了与新特性相关的内容外,没有发生显著的文档更改。

其他改进和错误修复

  • HSEARCH-3072@IndexedEmbedded.targetType现在可用,与Hibernate Search 5中的targetElement具有类似的功能。

  • HSEARCH-962:现在将执行多个查询来执行实体加载,即使文档ID映射到不是实体ID的属性,也会尊重配置的fetch大小。这将允许绕过某些数据库的限制,这些数据库对查询参数的总数有限制。

  • HSEARCH-3584:当启用“扩展”字节码增强(替换对公共字段的访问)时,Hibernate Search现在将正确检索在映射超类或实体超类中定义的属性中的数据。

等等。有关自上次发布以来的所有更改的完整列表,请参阅发行说明

如何获取此版本

所有详细信息都可在hibernate.org上的专门页面中找到,并保持最新。

反馈、问题、想法?

要取得联系,请使用以下渠道


返回顶部