RediSearch 2.4 发行说明
向量相似性搜索 (VSS)。新的查询语法 Dialect 版本 2。在 Dialect 1 和 Dialect 2 之间选择查询解析器行为。混合查询。
Redis 堆栈 |
---|
要求
RediSearch v2.4.16 需要:
- 最低 Redis 兼容版本(数据库):6.0.0
- 最低 Redis 企业软件版本(集群):6.0.0
v2.4.16(2022 年 11 月)
这是 RediSearch 2.4 的维护版本
更新紧急度:HIGH
:存在可能影响用户子集的严重错误。升级!
详:
-
错误修复:
- 排名 #2962AOF 预加载时崩溃 - 在定期回调中使用本地 GC 上下文 (MOD-3951)
- #2863CPU 使用率高 - 将 MAX_LEV_DISTANCE 更改为 4 (MOD-3563)
- #3041、#3063、#3051、#3143 多个内存泄漏(MOD-4121、MOD-4252)
- 排名 #3119相交迭代器 GetCriteriaTester 时崩溃 (MOD-4200)
- 排名 #3128必须按每个文档的索引重新评估过滤规则 (MOD-4207)
- 排名 #3127修复错误结果计数的断言失败,这会导致崩溃 (MOD-4214)
- #3171缺少导致崩溃的 NumericRangeIterator_OnReopen 的实现 (MOD-4255)
- 排名 #3191错误的查询迭代器强制转换导致 CPU 利用率达到 100% (MOD-4290)
- 排名 #3197Release 无法在主线程上创建临时索引 (MOD-4388)
- 排名 #2981在迭代器中双重释放混合查询导致崩溃 (MOD-4411)
- 排名 #3161将 INKEYS 和通配符查询组合在一起时,延迟会随着时间的推移而增加 (MOD-4343)
v2.4.15(2022 年 10 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
-
改进:
v2.4.14(2022 年 8 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
改进:
- 向量相似度 v0.3.2
- #2955在前缀查询期间添加超时 (MOD-3949)
- #2957对于具有许多索引的情况,从前缀列表中有效删除
-
错误修复:
v2.4.11(2022 年 7 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
- 排名 #2892结合
SORTBY
跟MAX
上FT.SEARCH
(不受支持)导致响应不一致和内存不足错误(MOD-3540、MOD-3644) - VecSim 版本 v0.3.1
- HNSW 索引:删除时回收内存 - HNSW 索引的数据结构现在在删除时回收内存并收缩
- 排名 #2892结合
-
改进:
- VecSim 版本 v0.3.1
- HNSW 指数:删除过程速度提高了 40%
- 更准确的 HNSW 索引内存消耗报告
- VecSim 版本 v0.3.1
v2.4.10(2022 年 7 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
v2.4.9(2022 年 6 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
-
改进:
- #2806将 RediSearch 初始化为库时不加载 JSON API
-
次要的重大更改:
- 如上所述,#2802 是一个错误修复。但是,如果您的应用程序依赖于 RediSearch 错误地修剪键的标记部分 (使用 ),这可能会破坏您的应用程序。这仅适用于在集群数据库中使用 RediSearch 的用户。
{}
- 如上所述,#2802 是一个错误修复。但是,如果您的应用程序依赖于 RediSearch 错误地修剪键的标记部分 (使用 ),这可能会破坏您的应用程序。这仅适用于在集群数据库中使用 RediSearch 的用户。
v2.4.8(2022 年 5 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
但是,如果您使用的是 Vector Similarity(在 RediSearch 2.4 中引入),则存在一些可能影响部分用户的关键错误。在这种情况下,您应该升级。
详:
-
错误修复:
-
改进:
- 排名 #2740混合向量查询的性能优化
v2.4.6(2022 年 5 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
v2.4.5(2022 年 4 月)
这是 RediSearch 2.4 的维护版本。
更新紧急度:MODERATE
:对服务器进行升级编程,但这不是紧急的。
详:
-
错误修复:
-
改进:
- #2694性能:在
TEXT
字段,如果 term 未出现在请求的字段中,则跳过 term 迭代器
- #2694性能:在
v2.4.3(2022 年 3 月)
这是 RediSearch 2.4 的正式发布版本。
标题
RediSearch 2.4 引入了一项新功能,即矢量相似性搜索 (VSS),它允许对存储在 Redis 哈希中存储(作为 BLOB)的矢量数据进行索引和查询。
它还引入了一种新的查询语法,以解决 RediSearch 早期版本中发现的查询解析器不一致问题。用户现在可以在 Dialect 版本 1(保留现有查询解析器行为)或 Dialect 版本 2(切换到更新的行为)之间进行选择。
所有 VSS 查询或使用PARAMS
选项必须使用 Dialect 版本 2。
2.4 中的新增功能
-
FT.CREATE
扩展为支持 2 种常用类型的向量索引的创建:-
FLAT 指数
当召回率比查询执行速度更重要时,使用这种类型的索引。查询向量将与平面索引中的所有向量进行比较。搜索结果将返回查询向量的确切前 k 个最近邻。
-
分层可导航小世界 (HNSW) 指数
此索引是这篇有影响力的学术论文的作者编写的库的修改实现。当查询执行速度优先于召回率时,将使用 HNSW 向量索引。返回的结果是近似最近邻 (ANN)。
您可以尝试不同的 HNSW 索引参数 (
M
,EFCONSTRUCTION
,EFRUNTIME
) 来改善“召回率与速度”的平衡。
-
-
用
FT.SEARCH
检索与给定查询向量最相似向量的前 K 个哈希。 -
混合查询
FT.SEARCH
:使用混合查询检索与向量和非向量搜索条件组合匹配的 Redis 哈希。非矢量搜索条件可以包含组合
NUMERIC
,TEXT
,TAG
和GEO
领域。混合查询通常用于现代电子商务搜索应用程序,具有“视觉”相似性和元数据相似性。 例如,您可以使用单个混合查询来查找在价格范围和/或地理位置内与给定图片在视觉上相似的商品。
-
用
FT.CONFIG SET
设置DEFAULT_DIALECT
在模块级别。默认情况下,DEFAULT_DIALECT
设置为 1。 -
覆盖
DIALECT
:可以在运行时覆盖特定命令的模块级方言。您可以在执行以下任一命令时指定方言:
如果您在运行这些命令中的任何一个时未指定 dialect,它们将使用默认的模块级 dialect 值。
详
-
特征:
- 排名 #2671添加 Dialect 支持
-
性能增强(自 2.4-RC1 起):
-
安全和隐私(自 2.4-RC1 起):
- #2584修复 MOD-2086,添加了对 TLS 密码的支持
-
错误修复(自 2.4-RC1 起):
DIALECT 简介
RediSearch 2.4.3 引入了一种新的查询语法,以解决 RediSearch 早期版本中发现的查询解析器不一致问题。用户现在可以在以下选项之间进行选择:
-
Dialect 版本 1(以保持 RediSearch 2.2 中的查询方言)
-
Dialect 版本 2(使用更新的 dialect)
现有的 RediSearch 2.2 用户将不必修改其查询,因为默认方言为 1。 但是,所有 RediSearch 用户都应逐渐更新其查询以使用 dialect 版本 2。
背景
在某些情况下,某些查询解析规则的行为与最初的预期不同。 包含以下运算符的查询可能会返回意外结果:
AND
- 引号、~、- 和 % (精确、可选、否定、模糊)
OR
为了最大限度地减少对现有、不受影响的 RediSearch 用户的影响,引入了 DIALECT 设置以允许:
-
无需任何修改即可运行的现有查询 (DIALECT 1)
-
从更新的查询解析行为中受益的新查询 (DIALECT 2)
受影响的查询示例
如果现有查询属于以下任何类别,则它们在不同 DIALECT 版本下的行为可能会有所不同:
-
您的查询有一个 field 修饰符,后跟多个单词。
考虑这个简单的查询
.@name:James Brown
字段修饰符
@name
后面跟着 2 个字:James
和Brown
.使用 DIALECT 1 时,解析器将此查询解释为 “find
James Brown
在@name
领域。在 DIALECT 2 中,解析器将其解释为“查找
James
在@name
field 和Brown
在任何文本字段中。换句话说,查询解析器将其解释为 .(@name:James) Brown
使用 DIALECT 2,您可以通过将查询更新为
.@name:(James Brown)
-
您的查询使用引号、~、-、% (精确、可选、否定、模糊)。
考虑一个带有否定的简单查询
.-hello world
使用 DIALECT 1 时,解析器将此查询解释为“在不包含
hello
AND 不包含world
."这相当于 或-(hello world)
.-hello -world
在 DIALECT 2 中,解析器将其解释为
-hello
和world
,所以只有hello
是否定的。使用 DIALECT 2,您可以通过将查询更新为
.-(hello world)
说明解析器行为差异的另一个示例是hello world | "goodbye" moon
:
-
使用 DIALECT 1 时,解析器将此查询解释为搜索
(hello world | "goodbye") moon
-
在 DIALECT 2 中,解析器将其解释为搜索
hello world
或"goodbye" moon
.