在阵列类型字段

时间:2016-10-31 21:01:41

标签: cloudant

我有一个包含以下文档的数据库:

{_id: "1", module:["m1"]}
{_id: "2", module:["m1", "m2"]}
{_id: "3", module:["m3"]}

使用以下索引函数为这些文档创建搜索索引:

function (doc) {
  doc.module && doc.module.forEach && 
    doc.module.forEach(function(module){
       index("module",  module,  {"store":true, "facet": true});
    });
}

索引使用"关键字"模块字段上的分析器。 样本数据非常小(11个文档,3个不同的模块值)

对于使用 group_field = module 参数的查询,我遇到两个问题:

  1. 并非所有群组都会被退回。我得到了3组中的2组。似乎在" m1"中返回了带有[" m1"," m2"]的文档。小组,但没有" m2"组。当我使用counts = [" modules"]时,我会得到不同值的完整列表。 我希望得到类似的东西:

    {
     "total_rows": 3,
     "groups": [
       {   "by": "m1",
           "total_rows": 1,
           "rows": [ {_id: "1", module: "m1"},
                     {_id: "2", module: "m2"}
           ]
          },
       {   "by": "m2",
           "total_rows": 1,
           "rows": [ {_id: "2", module: "m2"} ]
       },
        ....
    ]
    }
    
  2. 使用group_field时,不会返回书签,因此无法获取组中超过200组或200行的下一个数据块。

    < / LI>

1 个答案:

答案 0 :(得分:1)

Cloudant Search基于Apache Lucene,因此具有其属性/限制。

分组的一个限制是“组字段必须是单值索引字段”(Lucene Grouping),因此文档只能在一个组中。

分组的另一个限制/属性是需要提前提供topNGroups和maxDocsPerGroup,而在Cloudant情况下,最大数量是200和200(可以使用group_limit和{{1}将它们设置得更低参数)。