无法让聚合工作。

Tom*_*ron 1 redis redisearch

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

我似乎无法得到一个好的结果。

出于测试目的,我创建了一个基本的索引/模式,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

FT.AGGREGATE test "*" GROUPBY 1 @field REDUCE COUNT 0 AS agg
Run Code Online (Sandbox Code Playgroud)

我的期望是我得到的结果表明hello发生了三次并world发生了一次......但我得到了以下结果:

1) (integer) 1
2) 1) "field"
   2) (nil)
   3) "agg"
   4) "4"
Run Code Online (Sandbox Code Playgroud)

我认为这很直接……但我显然做错了什么。

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

1) 1) "name"
   2) "ft"
   3) "ver"
   4) (integer) 10300
2) 1) "name"
   2) "ReJSON"
   3) "ver"
   4) (integer) 10001
Run Code Online (Sandbox Code Playgroud)

任何帮助都会是超级的。

谢谢!

Tom*_*ron 5

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

聚合文档中的部分,他们描述了FT.AGGREGATE他们提到的命令参数LOAD {nargs} {property},他们说:

从文档 HASH 对象加载文档字段。作为一般经验法则,应该避免这种情况。聚合所需的字段应存储为SORTABLE,它们可用于聚合管道且延迟非常低。LOAD极大地损害了聚合查询的性能,因为每个处理过的记录都需要对 redis 键执行等效的 HMGET,当在数百万个键上执行时,处理时间非常长。

从原始问题中的查询示例中,我有:

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

由于模式定义没有field定义,因为SORTABLE我必须LOAD“字段”才能对其执行聚合。

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

但是,由于根据文档LOAD会损害性能,因此我应该将要聚合的字段定义为SORTABLE.

FT.CREATE test SCHEMA field TEXT SORTABLE

正确定义模式后,我的原始查询就可以工作了。