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:计划进行服务器升级,但并不紧急。

详情:

  • 错误修复:

    • #3095 替换协调器中解析参数和查询的顺序 (MOD-4205)
    • #3012 提高了LLAPI findInfo的效率,这可能会减少Redis Enterprise升级期间的稳定性问题 (MOD-4197, MOD-4052)
    • #3040, #3049 修复了协调器上非SORTABLE字段的SORTBY数字字段问题 (MOD-4115)
    • #3050 当与SORTBY结合时,缺失值的字段结果应排在最后 (MOD-4120)
  • 改进:

    • #3047 添加 strlen 字符串函数到 FT.AGGREGATE (MOD-4141)
    • #3038 添加 number_of_usesFT.INFO 用于统计索引被查询的次数

v2.4.14 (2022年8月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • 改进:

  • 错误修复:

    • #2937 遇到过期文档后返回 NULL 响应 (MOD-3515)
    • #2962 AOF 预加载时崩溃 (MOD-3951)
    • #2986 与模式前缀相关的内存泄漏

v2.4.11 (2022年7月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • 错误修复:

    • #2892FT.SEARCH上结合使用SORTBYMAX(这是不支持的)导致不一致的响应和内存不足错误(MOD-3540, MOD-3644)
    • VecSim v0.3.1
      • HNSW索引:删除时回收内存 - HNSW索引的数据结构现在在删除时回收内存并缩小
  • 改进:

    • VecSim v0.3.1
      • HNSW 索引:删除过程速度提高了 40%
      • HNSW 索引的内存消耗报告更加准确

v2.4.10 (2022年7月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • 错误修复:

    • #2863 由于FT.SPELLCHECK中的(Levenshtein) DISTANCE过高导致的崩溃。此修复将DISTANCE限制为4。(MOD-3563)
    • #2875 并非所有带有向量字段的文档都使用自动分层进行了索引 (MOD-3584)
    • #2846 对向量索引强制执行Redis Enterprise内存限制

v2.4.9 (2022年6月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • Bug 修复:

    • #2837, #2836FT.AGGREGATE "... APPLY '-INF % -1'..." 时崩溃
    • #2814 FT.EXPLAIN 没有参数时导致崩溃
    • #2790 在所有文档中删除一个术语后(垃圾回收),FT.INFO 中的 num_terms 值不正确
    • #2804OFFSET+LIMIT 大于 maxSearchResults(配置)时冻结
    • #2791 向协调器添加 BlockedClientMeasureTime 以获得更准确的性能统计
    • #2802 现在 FT.SEARCH 返回键的标记部分(花括号 {}
  • 改进:

    • #2806 当RediSearch作为库初始化时,不要加载JSON API
  • 较小的破坏性更改:

    • 如上所述,#2802 是一个错误修复。但是,如果你的应用程序依赖于 RediSearch 错误地修剪键的标记部分(使用 {}),这可能会破坏你的应用程序。这仅适用于在集群数据库中使用 RediSearch 的用户。

v2.4.8 (2022年5月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划升级服务器,但并不紧急。 但是,如果您正在使用向量相似度(在RediSearch 2.4中引入),则存在一些可能影响部分用户的关键错误。在这种情况下,您应该进行升级。

详情:

  • 错误修复:

    • #2739 协调器中与向量相似性相关的内存泄漏 (MOD-3023)
    • #2736, #2782 向量相似性索引的内存分配限制(导致内存不足)(MOD-3195)
    • #2755 创建新向量索引时比较整个向量字段名称而不是前缀
    • #2780 初始化EvalContext中的所有变量(可能导致集群数据库崩溃)
  • 改进:

    • #2740 混合向量查询的性能优化

v2.4.6 (2022年5月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • Bug 修复:

    • #2716 移除了可能导致副本崩溃的断言语句 (MOD-3008, MOD-3012)
    • #2734 ON_TIMEOUT RETURN 策略修复:返回超时前获得的结果,而不是丢弃它们
    • #2714 协调器在非TLS设置中的内存泄漏问题

v2.4.5 (2022年4月)

这是RediSearch 2.4的维护版本。

更新紧急程度:MODERATE:计划进行服务器升级,但并不紧急。

详情:

  • 错误修复:

    • #2702 INKEYS 与向量相似性结合导致服务器无响应 (MOD-2952)
    • #2705 删除在索引时被跳过的文档时结果不正确
    • #2698 中文同义词
  • 改进:

    • #2694 性能:在TEXT字段中,如果术语未出现在请求的字段中,则跳过术语迭代器

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 索引参数(MEFCONSTRUCTIONEFRUNTIME)来改善“召回率与速度”的平衡。

  • 使用 FT.SEARCH 检索与给定查询向量最相似的前K个哈希。

  • FT.SEARCH中的混合查询:

    使用混合查询来检索符合向量和非向量搜索条件组合的Redis哈希。非向量搜索条件可以包括结合NUMERICTEXTTAGGEO字段的表达式。

    混合查询常用于现代电子商务搜索应用中,这些应用具有“视觉”相似性和元数据相似性。 例如,您可以使用单个混合查询来查找在价格范围和/或地理位置内与给定图像视觉相似的产品。

  • 使用 FT.CONFIG SET 在模块级别设置 DEFAULT_DIALECT。默认情况下,DEFAULT_DIALECT 设置为 1。

  • 覆盖 DIALECT:

    可以在运行时为特定命令覆盖模块级别的方言。在执行以下任何命令时,您可以指定方言:

    如果在运行这些命令时未指定方言,它们将使用默认的模块级别方言值。

详情

  • 功能:

    • #2671 添加方言支持
  • 性能增强(自2.4-RC1起):

    • #2647 为临时平面搜索规范化向量一次
    • #2638 优化了不需要分数时的混合查询
    • #2653 更新特定字段加载优化规则
    • #2670 使用REDISMODULE_EVENT_SHUTDOWN来清除资源
  • 安全性和隐私(自2.4-RC1起):

    • #2584 修复MOD-2086,增加了对TLS密码的支持
  • Bug fixes (since 2.4-RC1):

    • #2651 修复查询期间文档过期导致的客户端冻结问题
    • #2641 协调器中的内存泄漏
    • #2645 在数据摄取时忽略NULL值
    • #2654 VecSim混合查询 - 对于无效的交集子迭代器返回空迭代器

介绍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个单词:JamesBrown

    使用 DIALECT 1 时,解析器将此查询解释为“在 @name 字段中查找 James Brown。”

    使用 DIALECT 2 时,解析器将其解释为“在 @name 字段中查找 James 并在任何文本字段中查找 Brown。” 换句话说,查询解析器将其解释为 (@name:James) Brown

    使用 DIALECT 2 时,您可以通过将查询更新为 @name:(James Brown) 来实现 DIALECT 1 的默认行为。

  • 您的查询使用了引号、~、-、%(精确、可选、否定、模糊)。

    考虑一个带有否定的简单查询 -hello world

    使用 DIALECT 1 时,解析器将此查询解释为“查找任何不包含 hello 且不包含 world 的字段中的值。”这相当于 -(hello world)-hello -world

    使用 DIALECT 2 时,解析器将其解释为 -helloworld,因此只有 hello 被否定。

    使用 DIALECT 2 时,您可以通过将查询更新为 -(hello world) 来实现 DIALECT 1 的默认行为。

另一个说明解析器行为差异的例子是 hello world | "goodbye" moon

  • 使用DIALECT 1,解析器将此查询解释为搜索(hello world | "goodbye") moon

  • 使用DIALECT 2时,解析器将其解释为搜索hello world"goodbye" moon

注意:
这是2.4的第一个GA版本。在Redis中,版本号将按照语义版本控制为2.4.3。由于Redis中模块的版本号是数字的,我们无法添加GA标志。
RATE THIS PAGE
Back to top ↑