无法使聚合正常工作。

Having trouble getting aggregations working.

我正在探索 RediSearch,我想我应该试试聚合功能,但遇到了障碍。

我好像得不到好结果。

出于测试目的,我创建了一个基本的 index/schema,如下所示:

FT.CREATE test SCHEMA field TEXT

FT.ADD test 1A 1 FIELDS field hello
FT.ADD test 2A 1 FIELDS field hello
FT.ADD test 3A 1 FIELDS field hello
FT.ADD test 4A 1 FIELDS field world

接下来,我发出了以下查询:

FT.AGGREGATE test "*" GROUPBY 1 @field REDUCE COUNT 0 AS agg

我的期望是我得到的结果表明 hello 出现了三次,而 world 出现了一次......但是我得到了以下结果:

1) (integer) 1
2) 1) "field"
   2) (nil)
   3) "agg"
   4) "4"

我认为这很简单...但我显然做错了什么。

此外,以下是 MODULE LIST 命令的输出:

1) 1) "name"
   2) "ft"
   3) "ver"
   4) (integer) 10300
2) 1) "name"
   2) "ReJSON"
   3) "ver"
   4) (integer) 10001

任何帮助都会很棒。

谢谢!

事实证明,我应该更好地阅读文档。

aggregations documentation 中他们描述 FT.AGGREGATE 命令参数的部分提到 LOAD {nargs} {property},他们说:

Load document fields from the document HASH objects. This should be avoided as a general rule of thumb. Fields needed for aggregations should be stored as SORTABLE, where they are available to the aggregation pipeline with very low latency. LOAD hurts the performance of aggregate queries considerably since every processed record needs to execute the equivalent of HMGET against a redis key, which when executed over millions of keys, amounts to very high processing times.

从我原来的问题中的查询示例:

FT.AGGREGATE test "*" GROUPBY 1 @field REDUCE COUNT 0 AS agg

由于模式定义没有将 field 定义为 SORTABLE,因此我必须 LOAD "field" 才能对其执行聚合。

FT.AGGREGATE test "*" LOAD 1 @field GROUPBY 1 @field REDUCE COUNT 0 AS agg

但是,根据文档,LOAD 会影响性能,因此我应该将要聚合的字段定义为 SORTABLE

FT.CREATE test SCHEMA field TEXT SORTABLE

在正确定义模式的情况下,我的原始查询有效。