分解数据矩阵。探索Redis提供了什么。

了解更多

研究更新:聚合和新功能

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

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

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

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

例如,以电子商务场景中的发货为例,其中有一个时间戳和过去十年中数百万次发货的总盒子大小(box_area)。让我们假设你想要找出前三年的箱子出货量最多的三年,这些箱子的面积大于300。我们不关心确切的数字;我们只是想要粗略的数字,它应该很好地格式化。我们的聚合查询看起来像这样:

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

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

这将输出以下结果:

1)(整数)10 2)1)“shipment_year”2)“2014”3)“shipment_count”4)“10k+发货”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之后不久,我们发布了redisch 1.2.0,其中包含了大量的新特性:

查询属性

进行子查询,修改查询的子句。这允许:

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

上述命令导致任何含有“ice”、“cream”和“sandwich”的文档的重量为0.5。您还可以根据子查询修改slop ($slop)和“order”需求($inorder)。

模糊匹配

匹配任何具有单个字符距离的项。例如," %redis% "不仅匹配' redis ',还匹配' jedis '和' predis '。

条件更新

只在满足条件的情况下更新文档,例如:

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

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

反斜杠转义

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

搜索idx "hello-world "

同义词的支持

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

FT.SYNADD idx hello hola hej bonjour

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

FT.SEARCH idx hej

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

Baidu