【问题标题】:How to get document ids from FT.AGGREGATE with Redisearch?如何使用 Redisearch 从 FT.AGGREGATE 获取文档 ID?
【发布时间】:2019-06-19 18:51:13
【问题描述】:

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

怎么做?

【问题讨论】:

    标签: redisearch


    【解决方案1】:

    使用聚合有时可能会返回与文档 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"
    

    【讨论】:

    • 感谢您的回答。大多数时候,我需要为我的聚合查询返回文档 ID。我已经考虑过在“可排序”字段中复制文档 ID(增加内存开销),但我期待 redisearch 在聚合数据时可以访问文档 @id。目前似乎不支持它(v1.4.2)。还是谢谢。
    • @Math,如果您选择正确的答案,请投票。如果它很好,但如果它不能解决您的问题,请投票,但不要将其标记为答案,因为其他人可能能够提供正确的答案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多