Redis Stack:存储 JSON 文档,对属性进行重复数据删除

问题描述 投票:0回答:1

我有一个 JSON 文档传入 Redis,其中包含目录路径。

Key: "idx:sys:ikSh-pEBejscyM5jrSyY"
"path";"/root/fred/subfolder1/subfolder2/subfolder3"

我最终可能会得到包含重复路径的提要。

Key: "idx:sys:h0Sh-pEBejscyM5jrSyX"
"path";"/root/fred/subfolder1/subfolder2/subfolder3"

我的目标是使用相同路径删除重复的键。

我已经使用 Redis 一段时间了,但我对 Redis Stack 还很陌生。 我使用 JSON.SET 将文档存储为 JSON

某些路径可能包含连字符。

我已经创建了一个索引。

FT.CREATE idx:sys
    ON  JSON
    PREFIX 1 fred:sys:
SCHEMA
    $.path AS path_tag TAG SORTABLE
    $.path AS path_text TEXT SORTABLE
    $.target.fspace AS filespace TEXT

如果我运行 ft.search,我会得到重复的条目。

 FT.SEARCH idx:sys "*" SORTBY path_text DESC  RETURN 1 $.path 
1) (integer) 2
2) "lucid:blansys:ikSh-pEBejscyM5jrSyY"
3) 1) "$.path"
   2) "/root/fred/subfolder1/subfolder2/subfolder3"
4) "lucid:blansys:h0Sh-pEBejscyM5jrSyX"
5) 1) "$.path"
   2) "/root/fred/subfolder1/subfolder2/subfolder3"

您对如何删除路径中具有重复条目的键有任何指示吗?

非常感谢您的关注和参与。

redis duplicates redis-stack
1个回答
0
投票

我想我找到了解决方案并发布,看看它是否对其他人有帮助。

我需要稍微改变我的索引;

我的密钥是使用文档中的 JSON 属性构建的;

fred:sys:<docId>

因此,我将此字段添加到我的架构中。

FT.CREATE idx:sys
    ON  JSON
    PREFIX 1 fred:sys:
SCHEMA
    $.path AS path_tag TAG SORTABLE
    $.path AS path_text TEXT SORTABLE
    $.target.fspace AS filespace TEXT
    $.docId AS docid TAG SORTABLE NOINDEX

然后,使用 FT.AGGREGATE,我获得了不同的路径值以及它们出现的所有 Redis 键。

FT.AGGREGATE idx:entryPath * GROUPBY 1 @path_text REDUCE TOLIST 1 @docid as docids

结果

1) (integer) 4
2) 1) "path_text"
   2) "/root/fred/subfolder1/sub-folder2/sub folder"
   3) "docids"
   4) 1) "h0Sh-pEBejscyM5jrSyX"
3) 1) "path_text"
   2) "/root/fred/subfolder1/subfolder2/subfolder"
   3) "docids"
   4) 1) "h0Sh-pEBejscyM5krSyX"
4) 1) "path_text"
   2) "/root/fred/sub-folder1/sub folder2/sub-folder3"
   3) "docids"
   4) 1) "ikSh-pEBejscyM5jrSyY"
5) 1) "path_text"
   2) "/root/fred/subfolder1/subfolder2/subfolder3"
   3) "docids"
   4) 1) "RFGC-5EB2UfWbJjp5QCt"
      2) "ikSh-pEBejsczyM5jrSyY"
      3) "R1GC-5EB2UfWbJjp5QCt"

我从 Node.js 调用它;我使用 array.shift() 和 array.split() 清理返回的数组。这给我留下了一个包含路径和嵌套键数组的数组。

然后,使用 Mustache 模板将数组转换为 JSON 对象。

现在我可以处理正在更新的目标系统中的每个不同路径,并运行键数组以在完成后从 Redis 中删除它们。

希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.