简单地说,我们现在是Redis
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向前发展。