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; }
支持的属性有:
- $weight: 确定子查询或标记在结果整体排名中的权重。
- $slop: 确定查询子句中允许的最大“间隔”(术语之间的空格)。
- $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/获取更多详情和示例。