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

我们刚刚发布了 Hibernate Search 7.2.0.CR1,这是 Hibernate Search 下一个次要版本的第一个候选版本。

这个版本引入了一个新的 prefix 谓词,对 knn 谓词进行了一些改进,与 OpenSearch 2.15 兼容,升级到 Hibernate ORM 6.6,并修复了一些错误。

要了解自 7.1 版本以来所有新特性和改进的摘要,请访问 hibernate.org 上的专用页面

Hibernate ORM (HSEARCH-5217)

Hibernate Search 现在依赖于 Hibernate ORM 6.6.0.CR2。

Lucene (HSEARCH-5184)

Lucene 后端现在使用 Lucene 9.11.1。

OpenSearch (HSEARCH-5181)

Elasticsearch 后端现在与 OpenSearch 2.15 以及其他已兼容的版本兼容。

其他

OpenSearch 2.14版本引入了一种将分数/相似度过滤器应用于knn查询的方法。这意味着在使用Elasticsearch后端的OpenSearch分布进行向量搜索过滤时之前施加的限制现在已被移除。值得注意的是,由于OpenSearch端如何实现此过滤器,应用相似度过滤器将导致忽略k值。

knn谓词,除了现有的.requiredMinimumSimilarity(..)过滤器外,现在还有一个基于分数的替代方案:requiredMinimumScore(..)。在knn搜索中,相似度和分数相互推导,在某些场景下,使用分数可能更简单,而在其他情况下则使用相似度。

为了提醒您向量搜索是如何工作的:要索引向量字段,它们应该使用@VectorField注解进行标注

@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 ->
    f.knn( 5 ) (1)
        .field( "coverImageEmbeddings" ) (2)
        .matching( coverImageEmbeddingsVector ) (3)
        .requiredMinimumSimilarity( similarity ) (4)
).fetchHits( 20 );
1 提供要查找的相似文档的数量。
2 指定向量字段的名称。
3 提供一个参考向量;匹配的文档将是那些索引向量与该向量“最相似”的文档。
4 指定参考向量和索引向量之间的所需最小相似度;索引向量相似度小于指定相似度值的文档将被过滤掉。或者,可以使用requiredMinimumScore(score)过滤器代替requiredMinimumSimilarity(similarity)

有关向量字段的信息,请参阅参考文档的此部分:向量字段,以及关于knn谓词的此部分:knn谓词

前缀谓词

prefix谓词匹配给定字段具有以给定字符串开头的值的文档。

List<Book> hits = searchSession.search( Book.class )
    .where( f -> f.prefix().field( "description" )
        .matching( "rob" ) )
    .fetchHits( 20 );

有关prefix谓词的更多信息,请参阅参考文档的此部分:prefix谓词

ValueConvert被弃用

搜索DSL一直在使用ValueConvert枚举来允许用户指定搜索查询中的值应该如何转换,无论是传递给谓词/聚合/排序的值,还是由投影/聚合返回的值。向前推进,为了更好地支持新用例并提高期望的清晰度,该枚举被新的枚举ValueModel所取代。目前,ValueModel提供以下选项

映射

这是默认模型,允许在实体端定义的类型上工作。

索引

此模型不应用转换,允许在索引端定义的类型上工作。

字符串

此模型应用格式化和解析,允许处理值的字符串表示。

原始

此模型不应用转换,允许处理后端在低级别上操作的类型。

对于接受ValueConvert输入的每个已弃用方法,现在都有一个接受ValueModel的替代方法。在代码中将ValueConvert.YES替换为ValueModel.MAPPING,将ValueConvert.NO替换为ValueModel.INDEX,其中显式设置了值。

有关传递给DSL的参数类型的信息,请参阅参考文档的此部分:参数类型,以及有关投影值的类型的信息,请参阅参考文档的此部分:投影值类型

其他改进和错误修复

  • HSEARCH-5170:修复在移除实体之前将关联设置为null可能不会触发索引的潜在问题

还有更多。有关自上次发布以来的全部更改列表,请参阅发布说明

如何获取此版本

所有详细信息都在 hibernate.org 上的专用页面上,并保持最新。

入门,迁移

对于新应用程序,请参考以下指南以进行 Hibernate ORM 集成

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

反馈,问题,想法?

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


返回顶部