如何使用 Redisearch 从 FT.AGGREGATE 获取文档 ID?

How to get document ids from FT.AGGREGATE with Redisearch?

我想聚合文档,returns 只聚合文档 ID。

怎么做?

使用聚合,您有时可能会 return 结果与文档 ID 无关(例如,如果您按某个字段分组,然后 return 分组大小)。这就是聚合结果不包含文档 ID 的原因。如果您的特定聚合确实保留了文档 ID,则可以将其作为 none 索引字段放入文档本身,然后 return 它。

例如:

127.0.0.1:6379> FT.CREATE idx SCHEMA name TEXT SORTABLE docid TAG SORTABLE NOINDEX
OK
127.0.0.1:6379> FT.ADD idx doc1 1.0 FIELDS name name1 docid doc1
OK
127.0.0.1:6379> FT.ADD idx doc2 1.0 FIELDS name name2 docid doc2
OK
127.0.0.1:6379> FT.ADD idx doc3 1.0 FIELDS name name1 docid doc3
OK
127.0.0.1:6379> FT.AGGREGATE idx * GROUPBY 1 @name REDUCE TOLIST 1 @docid as docids
1) (integer) 2
2) 1) name
   2) "name2"
   3) docids
   4) 1) "doc2"
3) 1) name
   2) "name1"
   3) docids
   4) 1) "doc1"
      2) "doc3"

在 RediSearch 的最新版本中,表达式 LOAD {nargs} {property} 允许使用 @__key 加载文档 ID,可以在聚合管道的后期阶段引用:

FT.AGGREGATE idx * LOAD 1 @__key GROUPBY 1 @type REDUCE TOLIST 1 @__key as keys