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

时间:2019-01-25 22:35:30

标签: redisearch

我想汇总文档并仅返回文档ID。

如何做到?

2 个答案:

答案 0 :(得分:4)

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

例如:

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"

答案 1 :(得分:0)

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

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