RediSearch 1.2 发布说明

聚合过滤器。查询属性。模糊匹配。条件更新。反斜杠转义。同义词支持。

需求

RediSearch v1.2.0 需要:

  • 最低Redis兼容版本(数据库):4.0.0
  • 最低Redis企业软件版本(集群):5.0.0

RediSearch 1.2.0 (2018年6月)

这个版本是我(@dvirsky)发布的最后一个版本,它包含了许多新的酷炫功能,实际上在1.1.0版本之上没有任何错误修复!再见了,感谢所有的鱼!

新功能

聚合过滤器

作为FT.AGGREGATE中聚合API的补充,可以使用FILTER关键字对管道进行后索引过滤。例如:

FT.AGGREGATE idx "*"
   GROUPBY 1 @foo
     REDUCE count 0 AS num
   FILTER "@num < 100"

详情请参见 http://redisearch.io/Aggregations/

查询属性

现在可以对查询的特定子句应用特定的查询修改属性(参见#212)。

语法是 (foo bar) => { $attribute: value; $attribute:value; ...}, 例如:

(foo bar) => { $weight: 2.0; $slop: 1 }
~(bar baz) => { $weight: 0.5; }

支持的属性有:

  1. $weight: 确定子查询或标记在结果整体排名中的权重。
  2. $slop: 确定查询子句中允许的最大“间隔”(术语之间的空格)。
  3. $inorder: 查询子句中的术语是否必须以与查询中相同的顺序出现。

模糊匹配

使用%包裹搜索词将导致索引将查询扩展到与原始词编辑距离为1的词。例如,查询%redis%将扩展为查询redis, jedis, credis, predis等(前提是这些词出现在索引的文档中)。

请注意,每个查询词需要独立包装,并且我们将每个词的最大扩展量限制为200,因为这显著影响性能。

条件更新

现在可以根据文档在更新之前的状态来更新文档(FT.ADD ... REPLACE [PARTIAL])。例如,如果我们的文档有一个时间戳字段,并且我们只想在时间戳低于某个值时更新其标题,我们可以执行以下操作:

FT.ADD myIndex myDoc 1.0
   REPLACE PARTIAL
   IF "@timestamp < 12313134523"
   FIELDS
       title "new title"

反斜杠转义

根据多个用户的要求,现在可以在文档中转义分隔符字符(在查询本身中已经完成),并在需要时避免分词。

例如,索引文本 hello\-world hello world 将创建分词 ["hello-world", "hello", "world"]。请注意,在大多数语言和 redis-cli 中,您需要转义反斜杠本身,因此您需要发送字符串 hello\\-world 而不是 hello\-world

同样适用于查询字符串:如果文档包含标记 hello-world,可以通过在 redis-cli 中运行 `FT.SEARCH idx "hello\-world"` 来找到它,这将导致查询不被分隔。

同义词支持

现在可以为索引提供同义词组(例如 boy, child, kid),并使其自动索引同义词,以便搜索其中一个词时,会返回包含另一个词的文档。

请参阅http://redisearch.io/Synonyms/获取更多详情和示例。

RATE THIS PAGE
Back to top ↑