简单地说,我们现在是Redis

了解更多

reresearchupdate:聚合和新功能



回到博客

RedisConf的一个关键公告是用于RediSearch(版本1.1.0版)。聚合对于像reresearch这样的实时搜索引擎来说是一个非常强大的功能。它们不仅允许对数据进行查询,还允许对数据进行数学总结以获得分析洞察力。reresearch聚合与reducer的标准工具包一起提供:

  • 计数
  • 总结
  • 最低
  • 最大
  • 标准偏差
  • 分位数

从概念上讲,聚合由操作管道组成。每个操作可以以任何逻辑顺序使用,并且可以重复。基本操作有:

  • 集团和减少
  • 排序
  • 变换(应用)
  • 限制
  • 过滤器

例如,以电子商务场景中的发货为例,在该场景中,您有一个时间戳和过去十年中数百万次发货的总盒子大小(box_area)。比方说,你想找出装运面积大于300个箱子最多的前三年。我们不关心确切的数字;我们只需要大致的数字,而且格式应该很好。我们的聚合查询看起来像这样:

这可能看起来不像任何Redis命令,你曾经见过,但当你分解它不是那么复杂。

ft .总出货量"@box_area:[300 +inf]" 在索引中"出货,“找到与之相配的物品box_area大于300。它使用与reresearch其余部分相同的查询语法。
应用“一年(@shipment_timestamp)”作为shipment_year 这个转换shipment_timestamp进入包含函数的一年。这个结果现在可以访问为shipment_year
GROUPBY 1 @shipment_year REDUCE COUNT 0 AS shipment_count . GROUPBY 1 @shipment_year REDUCE COUNT 0 集团所有的shipment_year把结果放在一起,数一数。将这个结果引用为shipment_count
SORTBY 2 @shipment_count DESC 我们将按照上一步计算的计数降序对这些值进行排序。
极限0 3 我们只对前三个值感兴趣。
应用"格式("%sk+出货量",楼层(@shipment_count / 1000))"作为shipment_count 再次转换计数。从内部表达式(内部)开始地板上),我们将做一些算术来缩短数字,因为我们不关心确切的值。然后我们将使用地板上去掉小数点后的任何数。最后,我们将使用printf样式格式并(再次)引用它shipment_count

结果如下:

1)(整数)10“shipment_year”2)“2014”3)“shipment_count”4)“10000 +出货量”3)1)“shipment_year”2)“2017”3)“shipment_count”4)“9k+出货量”4)1)“shipment_year”2) "2015" 3) "shipment_count" 4) "9k+ Shipments"

通过将这些操作安排在一起,您可以以以前不可能的方式快速分析数据。这是一个非常深入和广泛的功能,比这篇博文所能简单概括的要大,所以最好是看看它的实际应用。观看这个视频看到Dvir的聚合演示:

在RedisConf之后不久,我们发布了RediSearch 1.2.0,其中包含了大量的新特性:

查询属性

做子查询修改查询的子句。这允许:

~(冰淇淋三明治)=>{$重量:0.5;}

上面的命令将导致任何包含“ice”、“cream”和“sandwich”的文档的权重为0.5。您还可以基于子查询修改slop ($slop)和“in order”需求($inorder)。

模糊匹配

匹配任何带有单个字符距离的物品。例如,“%redis%”不仅可以匹配“redis”,还可以匹配“jedis”和“predis”。

条件更新

只在满足以下条件时更新文档:

REPLACE PARTIAL IF "@timestamp < 12313134523" FIELDS title" new title"

当时间戳低于12313134523时,该代码将更新文档' myDoc '。它将只有更新标题。

反斜杠转义

使用反斜杠作为转义,以便将控制字符作为正常文本处理。这个查询将在索引文档中查找“hello-world”和“world”:

FT.SEARCH idx "hello-world world"

同义词的支持

在有完全相同但拼写不同的情况下,匹配可能会很棘手。使用FT.SYNADD和FT.SYNUPDATE,您可以添加等价的术语,随后添加的文档将被匹配。鉴于以下几点:

你好,你好,你好

任何具有这些术语的新文档都将在这样的查询中匹配:

FT.SEARCH idx hej

最后,版本1.2.0是由Dvir领导的reresearch的最后一个版本。我们悲伤看到他走但我们希望他在新组织的新冒险中一切顺利(创建一些东西,我们知道这非常酷,与reresearch非常不同)。不要担心,reresearch是由一个完整的团队开发的复述,将继续创新并推动reresearch向前发展。

Baidu