简单地说,我们现在是Redis

了解更多

reresearch2.0迎来了第一个里程碑

我们很高兴地宣布在开发的第一个里程碑的发布RediSearch2.0。RediSearch是一个实时搜索引擎,可以让你查询你的Redis数据,以回答各种各样的复杂问题。

这个里程碑被称为2.0-M01,标志着索引与数据保持同步的方式的重新架构。而不是必须通过索引写入数据(使用FT.ADD命令),RediSearch现在将跟踪以散列形式写入的数据,并自动为其建立索引。

这里最大的优势是,你现在可以添加RediSearch到你现有的Redis实例,并创建一个二级索引,而不必更新你的应用程序代码。这让您可以立即开始在现有数据上使用reresearch,只需加载reresearch模块并定义模式。RediSearch 2.0的一般可用性预计在今年秋天。

注意:这个新特性带来了一些变化API(下面列出)。我们试图尽可能地保持向后兼容性,但在这种情况下,这是不可能的。我们计划在收集客户反馈的同时进行调整和修复。)

RediSearch 2.0里程碑的架构。

API的变化

如上所述,这个reresearch2.0里程碑包括了对API的几个更改:

  1. 索引不再存在于键空间中。例如,如果您使用索引键(idx:<索引名>)来列出数据库中的索引,那么这将不再起作用。但是,我们引入了一个命令FT._LIST返回数据库中的所有索引。
  2. 索引必须使用前缀/过滤器创建。它们指定哪些文档将由reresearch自动编入索引。您可以指定一个简单的前缀和/或一个复杂的过滤器表达式。
  3. 不可能进行升级。如果你有RDB使用旧版本的RediSearch创建的RediSearch 2.0将无法读取它。目前,您必须重新索引整个数据集。然而,我们正在进行GA版本的升级过程。
  4. 它只适用于Redis 6和以上。
  5. FT命令被映射到它们的redis等效命令。这使得现有的应用程序仍然可以使用RediSearch 2.0。映射关系如下:
    1. FT.ADD=>HSET
    2. FT.DEL=>默认(DD)
    3. FT.GET=>HGETALL
    4. FT.MGET=>HGETALL
  6. 反向索引本身不再保存到RDB中.这并不意味着不支持持久性。在Redis启动后,reresearch将索引定义保存到RDB中,并在后台索引数据。可以通过使用FT.INFO命令。

新的API

API最大的更新是如何创建索引。在RediSearch 2.0命令FT.CREATE用于创建索引。新增的API在这里用黄色突出显示:

FT.CREATE{指数}在{structure} [PREFIX {count} {PREFIX} [{PREFIX} ..[FILTER {FILTER}] [LANGUAGE_FIELD {lang_field}] [LANGUAGE {lang}] [SCORE_FIELD {SCORE_FIELD}] [SCORE {SCORE}] [PAYLOAD_FIELD {PAYLOAD_FIELD}][TEMPORARY {seconds}] [MAXTEXTFIELDS] [NOOFFSETS] [NOHL] [NOFIELDS] [NOFREQS] [STOPWORDS {num} {stopword}…[SCHEMA {field} [TEXT [NOSTEM] [WEIGHT {WEIGHT}] [PHONETIC {matcher}] | NUMERIC | GEO | TAG [SEPARATOR {sep}]][SORTABLE][NOINDEX]…

让我们来挖掘一些细节:

  • {结构}目前只支持哈希
  • 前缀{数}{前缀}告诉索引应该索引哪些键。您可以添加几个前缀到索引。因为参数是可选的,默认值是(所有键)
  • 过滤器{过滤器}是具有完整的reresearchch聚合表达式语言.可以使用@__key来访问刚刚添加/更改的键
  • 语言分数允许您覆盖默认语言并为所有被索引的文档评分
  • LANGUAGE_FIELDSCORE_FIELD,PAYLOAD_FIELD允许您使用特定于文档的语言和评分,并将有效负载用作文档中的字段。

其他限制和变更

reresearch2.0 - m01里程碑还带来了一些其他更新:

  • NOSAVE已不再支持。
  • 更新哈希值意味着整个文档将被索引(keyspace通知不会指明哪些字段被更改了)。所以部分更新会比较慢。请注意,我们仍在研究在这些情况下提高性能的选项。
  • 字段名现在是区分大小写的,因此声明字段“FOO”并将其索引为“FOO”将不起作用。
  • FT.ADD命令将被映射到hset如下所示:

add idx doc1 1.0 LANGUAGE eng PAYLOAD PAYLOAD FIELDS f1 v1 f2 v2

映射到

HSET doc1 __score 1.0 __language eng __payload payload f1 v1 f2 v2

这意味着索引上的分数、语言和有效负载字段必须相应地称为__score、__language、__payload,以便映射按预期工作。

  • FT.ADDHASH已不再支持。使用HSET
  • FT.OPTIMIZERediSearch垃圾收集函数负责优化索引。

结论

我们对这些变化感到非常兴奋,因为你现在可以加载RediSearch到你现有的Redis数据库并索引驻留在散列中的现有数据,而无需在操作这些文档时更新应用程序逻辑。你可以试试这个里程碑版本通过获取源代码GitHub或者通过使用1:99:1RedisSarch码头工人形象.这个版本还没有生产就绪,但我们想与您分享它现在收集您的反馈。请与我们分享任何意见或问题GitHub库或在复述,社区论坛

Baidu