Cloudant搜索:使用计数方面的条件是什么?



我正在尝试使用Cloudant设置搜索索引,但我发现该文档非常混乱。它说:

faceting

为了使用构面,索引中的所有文档都必须包括启用了方面的所有字段。如果您的文档不包含所有字段,您将收到一个bad_request错误,其原因为" DIM FIELD_NAME不存在。"

如果每个文档都不包含所有面积的字段,则建议您为每个字段创建单独的索引。如果您不为每个字段创建单独的索引,则必须仅包含包含所有字段的文档。使用单个if语句。

验证每个文档中存在的字段是否存在。

计数

计数facet语法列出了字段列表,并返回每个命名字段的每个唯一值的查询结果。

计数操作仅在索引值为字符串时才有效。索引值不能混合类型。例如,如果索引了100个字符串,一个数字,则该索引不能用于计数操作。您可以使用操作符typeof运算符检查类型,并使用ParseInt,ParseFloat和.toString((函数转换。

具体来说,当"索引中的所有文档都包含启用了刻度的所有字段"时,这意味着什么。

例如,如果我的数据库包含以下文档:

{
  "_id": "mydoc"
  "subjects": [ "subject A", "subject B" ]
}

我写了一个搜索索引:

function (doc) {
  for(var i=0; i < doc.subjects.length; i++)
    index("hasSubject", doc.subjects[i], {facet: true});
}

这是非法的,因为mydoc没有称为hasSubject的字段?当我们重写查询时看起来像;

{
  "_id": "mydoc"
  "hasSubject": true,
  "subjects": [ "subject A", "subject B" ]
}

那会突然变得还可以...?

,因此新文档位于https://console.ng.bluemix.net/docs/services/cloudant/api/api/search.html#faceting;但是,刻面的条目是相同的。所以没什么大不了的。

要回答您的问题,我认为文档在说什么是数据库中的所有JSON文档都必须包含subjects字段,这是您在示例中要宣布的。

因此,我还将考虑这样的定义您的搜索索引:

function (doc) {
  if (doc.subjects) {
    for(var i=0; i < doc.subjects.length; i++) {
      if (typeof doc.subjects[i] == "string") {
        index("hasSubject", doc.subjects[i], {facet: true});
      }
    }
  }
}

,如果您在数据库中有这样的文档:

{
  "_id": "mydoc"
  "hasSubject": true,
}

我认为这突然会使您的方面不正常。

最新更新