【发布时间】:2017-04-30 09:16:10
【问题描述】:
我正在尝试使用 Cloudant 设置搜索索引,但我发现 the documentation 非常混乱。它指出:
刻面
为了使用分面,索引中的所有文档都必须包含所有启用分面的字段。如果您的文档未包含所有字段,您将收到 bad_request 错误,原因如下:“dim field_name 不存在”。
如果每个文档不包含构面的所有字段,建议您为每个字段创建单独的索引。如果您不为每个字段创建单独的索引,则必须仅包含包含所有字段的文档。使用单个 if 语句验证每个文档中是否存在字段。
计数
count 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" ]
}
会不会突然好起来...?
【问题讨论】:
标签: search cloudant faceted-search