我们刚刚发布了 Hibernate Search 7.1.0.Alpha1,这是 Hibernate Search 下一个主要版本的第一个 alpha 版本。
这个版本为使用向量搜索在二进制(图像、音频或视频)数据上搜索提供了可能性。
除此之外,它还提高了 Hibernate Search 与其他框架的兼容性。
新功能
Hibernate Search 7.1 目前仍处于开发的早期阶段:一些功能可能尚未完成或可能以不兼容的方式更改。 |
Lucene 后端向量搜索
Hibernate Search 现在允许 Lucene 后端进行向量搜索,这是一个孵化特性。向量搜索提供了在二进制(图像、音频或视频)或文本数据上搜索的工具:外部工具将这些数据转换为向量(字节数组或浮点数数组,也称为“嵌入”),然后用于 Hibernate Search 的索引和查询。Hibernate Search 引入了一个新的字段类型 — @VectorField
和一个新谓词 knn
,以便向量可以被索引并在其上进行搜索。
矢量场可以与文档中表示为 byte
或 float
数组的矢量数据一起工作。开箱即用的 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 );
其他改进和错误修复
-
HSEARCH-5024:Hibernate Search 将不再在读取 Spring Boot 3.2+ 中的嵌套 JAR 时失败启动。
等等。有关上一版本以来所有更改的完整列表,请参阅 发布说明。
如何获取此版本
所有详细信息均可在 hibernate.org 上的专用页面 上找到并更新。