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

我们刚刚发布了 Hibernate Search 7.1.0.Alpha1,这是 Hibernate Search 下一个主要版本的第一个 alpha 版本。

这个版本为使用向量搜索在二进制(图像、音频或视频)数据上搜索提供了可能性。

除此之外,它还提高了 Hibernate Search 与其他框架的兼容性。

新功能

Hibernate Search 7.1 目前仍处于开发的早期阶段:一些功能可能尚未完成或可能以不兼容的方式更改。

Hibernate Search 现在允许 Lucene 后端进行向量搜索,这是一个孵化特性。向量搜索提供了在二进制(图像、音频或视频)或文本数据上搜索的工具:外部工具将这些数据转换为向量(字节数组或浮点数数组,也称为“嵌入”),然后用于 Hibernate Search 的索引和查询。Hibernate Search 引入了一个新的字段类型 — @VectorField 和一个新谓词 knn,以便向量可以被索引并在其上进行搜索。

矢量场可以与文档中表示为 bytefloat 数组的矢量数据一起工作。开箱即用的 byte[]float[] 属性类型将与新的字段类型一起工作。对于任何其他实体属性类型,应实现自定义的 值桥值绑定器。请记住,索引矢量 必须 长度相同,并且这个长度应事先指定以创建模式。

@Entity
@Indexed
public class Book {

        @Id
        private Integer id;

        @VectorField(dimension = 512)
        private float[] coverImageEmbeddings;

        // Other properties ...
}

通过 knn 谓词执行矢量相似度搜索。

float[] coverImageEmbeddingsVector = /*...*/

List<Book> hits = searchSession.search( Book.class )
.where( f ->
    // provide the number of similar documents to look for:
    f.knn( 5 )
        // the name of the vector field:
        .field( "coverImageEmbeddings" )
         // matched documents will be the ones whose indexed vector
         // is "most similar" to this vector
        .matching( coverImageEmbeddingsVector )
    // additionally an optional filter can be supplied
    // to provide a regular fulltext search predicate
    .filter( f.match().field( "authors.firstName" ).matching( "arthur" ) )
).fetchHits( 20 );

有关矢量字段的信息,请参阅参考文档的这一部分 矢量字段,以及有关新 knn 谓词 的这一部分。

其他改进和错误修复

  • HSEARCH-5024:Hibernate Search 将不再在读取 Spring Boot 3.2+ 中的嵌套 JAR 时失败启动。

等等。有关上一版本以来所有更改的完整列表,请参阅 发布说明

如何获取此版本

所有详细信息均可在 hibernate.org 上的专用页面 上找到并更新。

入门,迁移

对于新应用程序,请参阅此处关于 Hibernate ORM 集成的入门指南

对于现有应用程序,假设您还升级了依赖项,Hibernate Search 7.1 可以作为 7.0 的直接替代品。有关弃用的配置和 API 的信息包含在 迁移指南 中。

反馈,问题,想法?

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


返回顶部