【问题标题】:ArangoDB getting all unique tags from resultsArangoDB 从结果中获取所有唯一标签
【发布时间】:2020-07-16 18:30:50
【问题描述】:

我在 ArangoDB 中有一个文档。 { title: "title 12345", tags : ["tagx", "tagy", "tagz"}

  1. 我在title 上有一个全文索引,在tags[*] 上有另一个哈希索引。

  2. 我有一个查询,我想在title 上使用全文搜索并通过tags 应用一些过滤并在结果中获得skip x limit 10。我能够做到这一点。这将帮助我进行分页。在一次 API 调用中,我可以返回用户 10 个项目。

  3. 但是,我还想获取结果中存在的所有唯一标签(没有跳过和限制约束),而不会触及结果中存在的所有文档。这将帮助我显示用户可以进一步选择以缩小搜索范围的标签。

我们可以假设数据库中会有少量的唯一标签(大约 30-40 个)。在 ArangoDB 中有没有一种有效的方法来实现这一点?也许,我们可以创建一些新的索引或更改架构来实现这一点。

【问题讨论】:

    标签: database database-design arangodb


    【解决方案1】:

    假设您要创建一个集合,其中包含名为 test 的文档,其内容如下

    为了可重现,我插入的数据是:

    [{"_key":"342","_id":"test/342","_rev":"504","tags":["tagx","tagy","tagz"],"title":"title 12345"},{"_key":"564","_id":"test/564","_rev":"591","tags":["tagx","tagy","tagt"],"title":"title another"},{"_key":"510","_id":"test/510","_rev":"538","tags":["tagh","tagk","tagz"],"title":"title 56789"}]
    

    如果您运行以下 AQL 查询

    let tags = (for i in test
    return i.tags)[**]
    
    return unique(tags)
    

    这将返回

    [
      [
        "tagk",
        "tagh",
        "tagt",
        "tagz",
        "tagy",
        "tagx"
      ]
    ]
    

    如您所见,在多个文档中重复了不同的标签,结果显示一个只有唯一标签的数组

    【讨论】:

    • 这不是我想要的。如果您分析此查询,您将看到这将命中结果中的每个文档
    • 抱歉,您能否说明过滤或跳过文档的条件?谢谢
    • 我已经更新了这个问题,提供了更多的说明和用例。
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多