我们刚刚发布了 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 以及其他已兼容的版本兼容。
- 其他
-
-
HSEARCH-5202: 升级到 Elasticsearch 客户端 8.14.3
-
HSEARCH-5200: 升级到 Jackson 2.17.2。
-
HSEARCH-5212: 升级到 Avro 1.12.0。
-
HSEARCH-5167: 升级到 HPPC 0.10.0。
-
HSEARCH-5179: 升级到 AWS SDK 2.26.4。
-
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) 。 |
前缀谓词
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
,其中显式设置了值。
如何获取此版本
所有详细信息都在 hibernate.org 上的专用页面上,并保持最新。
入门,迁移
对于新应用程序,请参考以下指南以进行 Hibernate ORM 集成
对于现有应用程序,Hibernate Search 7.2 可作为 7.1 的直接替代品,前提是您还升级了依赖项。有关已弃用配置和 API 的信息包含在迁移指南中。