RediSearch 2.4 发布说明
向量相似性搜索(VSS)。新的查询语法方言版本2。选择方言1或方言2以确定查询解析器的行为。混合查询。
需求
RediSearch v2.4.16 需要:
- 最低Redis兼容版本(数据库):6.0.0
- 最低Redis企业软件版本(集群):6.0.0
v2.4.16 (2022年11月)
这是RediSearch 2.4的维护版本
更新紧急程度:HIGH
:存在一个可能影响部分用户的关键错误。请升级!
详情:
-
错误修复:
- #2962 AOF预加载时崩溃 - 在周期性回调中使用本地GC上下文 (MOD-3951)
- #2863 高CPU利用率 - 将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 错误的查询迭代器转换导致100% CPU利用率 (MOD-4290)
- #3197 发布未能在主线程上创建临时索引 (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
:计划进行服务器升级,但并不紧急。
详情:
-
改进:
- Vector similarity v0.3.2
- #2955 在前缀查询期间添加超时 (MOD-3949)
- #2957 针对具有多个索引的情况,从前缀列表中高效移除
-
错误修复:
v2.4.11 (2022年7月)
这是RediSearch 2.4的维护版本。
更新紧急程度:MODERATE
:计划进行服务器升级,但并不紧急。
详情:
-
错误修复:
- #2892 在
FT.SEARCH
上结合使用SORTBY
和MAX
(这是不支持的)导致不一致的响应和内存不足错误(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
:计划进行服务器升级,但并不紧急。
详情:
-
Bug 修复:
-
改进:
- #2806 当RediSearch作为库初始化时,不要加载JSON API
-
较小的破坏性更改:
- 如上所述,#2802 是一个错误修复。但是,如果你的应用程序依赖于 RediSearch 错误地修剪键的标记部分(使用
{}
),这可能会破坏你的应用程序。这仅适用于在集群数据库中使用 RediSearch 的用户。
- 如上所述,#2802 是一个错误修复。但是,如果你的应用程序依赖于 RediSearch 错误地修剪键的标记部分(使用
v2.4.8 (2022年5月)
这是RediSearch 2.4的维护版本。
更新紧急程度:MODERATE
:计划升级服务器,但并不紧急。
但是,如果您正在使用向量相似度(在RediSearch 2.4中引入),则存在一些可能影响部分用户的关键错误。在这种情况下,您应该进行升级。
详情:
-
错误修复:
-
改进:
- #2740 混合向量查询的性能优化
v2.4.6 (2022年5月)
这是RediSearch 2.4的维护版本。
更新紧急程度:MODERATE
:计划进行服务器升级,但并不紧急。
详情:
-
Bug 修复:
v2.4.5 (2022年4月)
这是RediSearch 2.4的维护版本。
更新紧急程度:MODERATE
:计划进行服务器升级,但并不紧急。
详情:
-
错误修复:
-
改进:
- #2694 性能:在
TEXT
字段中,如果术语未出现在请求的字段中,则跳过术语迭代器
- #2694 性能:在
v2.4.3 (2022年3月)
这是RediSearch 2.4的正式发布版本。
头条新闻
RediSearch 2.4 引入了一项新功能,向量相似性搜索(VSS),它允许对存储在 Redis 哈希(作为 BLOBs)中的向量数据进行索引和查询。
它还引入了一种新的查询语法,以解决在以前版本的RediSearch中发现的查询解析器不一致问题。用户现在可以选择方言版本1(以保持现有的查询解析器行为)或方言版本2(以切换到更新的行为)。
所有VSS查询或任何使用PARAMS
选项的查询必须使用Dialect版本2。
2.4版本的新特性
-
FT.CREATE
扩展支持创建两种流行的向量索引类型:-
FLAT 索引
当召回率比查询执行速度更重要时,使用这种类型的索引。查询向量将与平面索引中的所有向量进行比较。搜索结果将返回与查询向量完全匹配的前 k 个最近邻居。
-
分层可导航小世界 (HNSW) 索引
该索引是对这篇有影响力的学术论文作者编写的库的修改实现。当查询执行速度优先于召回率时,使用 HNSW 向量索引。返回的结果是近似最近邻居 (ANNs)。
您可以尝试不同的 HNSW 索引参数(
M
、EFCONSTRUCTION
、EFRUNTIME
)来改善“召回率与速度”的平衡。
-
-
使用
FT.SEARCH
检索与给定查询向量最相似的前K个哈希。 -
FT.SEARCH
中的混合查询:使用混合查询来检索符合向量和非向量搜索条件组合的Redis哈希。非向量搜索条件可以包括结合
NUMERIC
、TEXT
、TAG
和GEO
字段的表达式。混合查询常用于现代电子商务搜索应用中,这些应用具有“视觉”相似性和元数据相似性。 例如,您可以使用单个混合查询来查找在价格范围和/或地理位置内与给定图像视觉相似的产品。
-
使用
FT.CONFIG SET
在模块级别设置DEFAULT_DIALECT
。默认情况下,DEFAULT_DIALECT
设置为 1。 -
覆盖
DIALECT
:可以在运行时为特定命令覆盖模块级别的方言。在执行以下任何命令时,您可以指定方言:
如果在运行这些命令时未指定方言,它们将使用默认的模块级别方言值。
详情
-
功能:
- #2671 添加方言支持
-
性能增强(自2.4-RC1起):
-
安全性和隐私(自2.4-RC1起):
- #2584 修复MOD-2086,增加了对TLS密码的支持
-
Bug fixes (since 2.4-RC1):
介绍DIALECT
RediSearch 2.4.3 引入了一种新的查询语法,以解决在之前版本的 RediSearch 中发现的查询解析器不一致问题。用户现在可以选择:
-
方言版本 1(以保持查询方言与 RediSearch 2.2 相同)
-
方言版本 2(使用更新后的方言)
现有的RediSearch 2.2用户不需要修改他们的查询,因为默认的方言是1。 然而,所有RediSearch用户应逐步更新他们的查询以使用方言版本2。
背景
在某些条件下,一些查询解析规则的行为与最初预期不符。包含以下操作符的查询可能会返回意外的结果:
AND
- 引号、~、- 和 %(精确、可选、否定、模糊)
OR
为了最小化对现有未受影响的RediSearch用户的影响,引入了一个DIALECT设置以允许:
-
无需任何修改即可运行的现有查询(DIALECT 1)
-
新查询将受益于更新的查询解析行为(DIALECT 2)
受影响的查询示例
您的现有查询在不同的DIALECT版本下可能会表现不同,如果它们属于以下任何类别:
-
您的查询有一个字段修饰符后跟多个单词。
考虑这个简单的查询
。@name:James Brown
字段修饰符
@name
后跟2个单词:James
和Brown
。使用 DIALECT 1 时,解析器将此查询解释为“在
@name
字段中查找James Brown
。”使用 DIALECT 2 时,解析器将其解释为“在
@name
字段中查找James
并在任何文本字段中查找Brown
。” 换句话说,查询解析器将其解释为 。(@name:James) Brown
使用 DIALECT 2 时,您可以通过将查询更新为
来实现 DIALECT 1 的默认行为。@name:(James Brown)
-
您的查询使用了引号、~、-、%(精确、可选、否定、模糊)。
考虑一个带有否定的简单查询
。-hello world
使用 DIALECT 1 时,解析器将此查询解释为“查找任何不包含
hello
且不包含world
的字段中的值。”这相当于 或-(hello world)
。-hello -world
使用 DIALECT 2 时,解析器将其解释为
-hello
和world
,因此只有hello
被否定。使用 DIALECT 2 时,您可以通过将查询更新为
来实现 DIALECT 1 的默认行为。-(hello world)
另一个说明解析器行为差异的例子是
hello world | "goodbye" moon
:
-
使用DIALECT 1,解析器将此查询解释为搜索
(hello world | "goodbye") moon
-
使用DIALECT 2时,解析器将其解释为搜索
hello world
或"goodbye" moon
。