View 如何使用group_level(couchdb中的sub selects)将超集键与子集匹配

View 如何使用group_level(couchdb中的sub selects)将超集键与子集匹配,view,couchdb,mapreduce,View,Couchdb,Mapreduce,如何在couchdb中进行子选择,或者如何使用group_level将超集键与子集匹配 我有一个非常复杂的问题,希望对于那些不只是第一次学习map/reduce和couchdb的人来说,这个问题的答案不会太复杂 我正在开发一个系统,该系统向客户机提供json清单,以便使用每天更新的内容对自己进行配置。在第一次运行时,客户端使用一些描述性标记(例如:屏幕大小、操作系统、位置)注册自己,服务器返回一个组id。客户端每天使用该id请求其清单。在后端,我们任意将共享某些标记的客户端分组在一起,以减少需要

如何在couchdb中进行子选择,或者如何使用group_level将超集键与子集匹配

我有一个非常复杂的问题,希望对于那些不只是第一次学习map/reduce和couchdb的人来说,这个问题的答案不会太复杂

我正在开发一个系统,该系统向客户机提供json清单,以便使用每天更新的内容对自己进行配置。在第一次运行时,客户端使用一些描述性标记(例如:屏幕大小、操作系统、位置)注册自己,服务器返回一个组id。客户端每天使用该id请求其清单。在后端,我们任意将共享某些标记的客户端分组在一起,以减少需要存储/服务的唯一清单的数量

我们的销售/管理人员有一个webapp,他可以在其中设置受众,以特定群体的特定内容为目标。一个受众可以重叠多个组。诀窍是,当客户报告以获取新的清单时,我们需要找出哪个受众最适合该客户群体。最佳匹配的受众将是第一个其标签是提交的组标签子集的受众,例如:

audience1: tagA, tagB, tagC, tagD audience2: tagA, tagC group1: tagA, tagB, tagC 听众1:塔加,塔加,塔加,塔加 听众2:塔加,塔加 第1组:tagA、tagB、tagC 此组应匹配audience2,而不是audience1

如果我们使用观众标签来寻找最佳的组匹配(换句话说,如果group.tags是观众标签的子集),我可以建立一个非常有效的索引,如下所示:

[tagA, tagB, tagC], group1._id [tagA, tagC, tagB], group1._id [tagB, tagA, tagC], group1._id [tagB, tagC, tagA], group1._id [tagC, tagA, tagB], group1._id [tagC, tagB, tagA], group1._id [tagA,tagB,tagC],组1.\u id [tagA,tagC,tagB],组1.\u id [tagB,tagA,tagC],组1.\u id [tagB,tagC,tagA],组1.\u id [tagC,tagA,tagB],组1.\u id [tagC,tagB,tagA],组1.\u id 并使用组_level=2和键=[tagA,tagC]将audience2与索引中的第二行匹配。问题是,我不知道如何从另一个方向进行匹配:将group.tags与audition.tags索引进行匹配,其中我们在查询时知道的标记(group.tags)是我们试图匹配的标记(audition.tags)的超集

我已经牢牢掌握了简单的m/r视图,但在这一点上,我一直处于死胡同。我遇到的每一个解决方案都涉及到在我的视图函数中进行某种子选择,这在couchdb视图中不起作用。。。有没有办法解决这样的问题


希望这个描述能有一些意义。

我能想到的最简单的解决方案是:

  • 对每个观众的标记进行排序,并将排序后的数组作为视图的键发出
  • ,即使用
    {“keys”:[“key1”、“key2”、…]}
    发布帖子
键是您正在查找的所有可能的键,按重要性的相反顺序(按指定键的顺序返回行)再次对键中的标记进行排序

在您的示例中,键可以是:

[tagA, tagB, tagC]
[tagB, tagC]
[tagA, tagC]
[tagA, tagB]
[tagC]
[tagB]
[tagA]

第一个结果是您想要的结果,因此您可以使用limit=1。

是的,我想这样就可以了。我昨天发现了关于多键发布的消息,并认为可能会有机会披露解决方案,谢谢。