【问题标题】:Is it possible to map/reduce a set of "ratings" into "relationships" in couchdb/cloudant?是否可以将一组“评级”映射/减少到 couchdb/cloudant 中的“关系”?
【发布时间】:2014-08-18 08:57:32
【问题描述】:

我有记录用户对某个项目的评分的“评分”文档,如下所示:

accountID: a1, itemID: i1, rating: 1
accountID: a2, itemID: i1, rating: 1
accountID: a3, itemID: i1, rating: 1
accountID: a1, itemID: i2, rating: 1
accountID: a2, itemID: i3, rating: 1

我想创建一个视图来显示哪些用户对同一项目进行了评分,以及评价了多少次。根据上述数据,我们看到 a1、a2 和 a3 对 i1 的评分相同,而 i2 和 i3 只是单独评分。结果集应如下所示:

accountID1: a1, accountID2: a2, numMatches: 1
accountID1: a1, accountID2: a3, numMatches: 1
accountID1: a2, accountID2: a3, numMatches: 1

这表明 a1 和 a2 都对同一个项目进行了一次评分 (i1),a1 和 a3 以及 a2 和 a3 也是如此(均为 i1)。其他项目被忽略,因为只有一位用户对其进行了评分。

是否可以通过 couchdb/cloudant 中的 map/reduce 实现这种转换?还是我必须通过提取给定项目的所有评级并运行每个帐户来在客户端进行计算?

【问题讨论】:

    标签: mapreduce couchdb cloudant


    【解决方案1】:

    您可以解决此问题的一种方法是在 itemId+​​userId 上编制索引,将评级作为值发出,然后使用 _stats 获取您想要的任何信息。这是您的设计文档:

    {
      _id: "_design/count_shared_reviews",
      views: {
        "count_shared_reviews": {
          map: function(doc) {
            emit([doc.itemID, doc.accountID], doc.rating);
          }.toString(),
          reduce: "_stats"
        }
      }
    }
    

    然后例如你可以做http://localhost:5984/testdb1/_design/count_shared_ratings/_view/count_shared_ratings?reduce=true&group=true&group_level=1,它将按级别1(即项目ID)分组,给你:

    {"rows":[
      {"key":["i1"],"value":{"sum":3,"count":3,"min":1,"max":1,"sumsqr":3}},
      {"key":["i2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
      {"key":["i3"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}}
    ]}
    

    您还可以按所有内容进行分组,在这种情况下,您将获得每个用户、每个项目的摘要 (http://localhost:5984/testdb1/_design/count_shared_ratings/_view/count_shared_ratings?reduce=true&group=true):

    {"rows":[
      {"key":["i1","a1"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
      {"key":["i1","a2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
      {"key":["i1","a3"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
      {"key":["i2","a1"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
      {"key":["i3","a2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}}
    ]}
    

    这有意义吗?

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      相关资源
      最近更新 更多