Cloudant中的查询索引不会返回预期数据

时间:2016-02-13 22:01:42

标签: indexing ibm-cloud cloudant

我在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"] },我会得到相同的回复。我原本期望更通用的查询比带有额外选择器的查询效果更好。

我只是不明白这是怎么回事!

2 个答案:

答案 0 :(得分:0)

“typ”是索引的第一个字段,因此是排序的基础。

“tim”,如果它是查询的唯一元素,则不利用索引,因此如果允许该查询,它将触发全表扫描。

但是,如果添加以下内容,则可以明确要求进行全表扫描:

"_id": { "$gt": null }

请参阅the doc,您的情况并未真正描述,但我认为这是隐含的。

答案 1 :(得分:0)

您是否尝试为这些字段创建单独的索引并运行相同的查询?