我在Bluemix上有一个Cloudant DB,其索引定义为:
{
"index": {
"fields": [
{ "typ": "asc" },
{ "sen": "asc" },
{ "tim": "asc" }
]
},
"type": "json"
}
我有查询表单
{
"selector": {
"tim": {"$gt": millisecs},
"typ": "H"
},
"fields": ["sen","val","tim"],
"sort": [
{ "typ": "asc" },
{ "sen": "asc" },
{ "tim": "asc" }
],
"limit": readCount
}
它完美无缺。如果我想获得所有内容,即删除条件typ="H"
,我会收到错误
"错误":" no_usable_index","原因":"此选择器没有可用的索引。"
如果我有"typ" : { "$in": ["H", "T"] }
,我会得到相同的回复。我原本期望更通用的查询比带有额外选择器的查询效果更好。
我只是不明白这是怎么回事!
答案 0 :(得分:0)
“typ”是索引的第一个字段,因此是排序的基础。
“tim”,如果它是查询的唯一元素,则不利用索引,因此如果允许该查询,它将触发全表扫描。
但是,如果添加以下内容,则可以明确要求进行全表扫描:
"_id": { "$gt": null }
请参阅the doc,您的情况并未真正描述,但我认为这是隐含的。
答案 1 :(得分:0)
您是否尝试为这些字段创建单独的索引并运行相同的查询?