【发布时间】:2017-07-24 03:39:58
【问题描述】:
我正在通过奇妙的pouchdb-find 在 CouchDB 2.0 实例上使用 Mango 查询。
有几次我收到了可怕的 no matching index found, create an index to optimize query time 警告,尽管我使用了索引字段。
刚才我在选择 "type": {"$in": ["a", "b"]} 或等效的 "$or": [{"type": "a"}, {"type": "b"}] 时得到了它,即使 type 上存在索引。
谷歌搜索(cloudant query docs,pouchdb-find docs,SO question)没有帮助,在后者@nlawson 说一些谓词($ne 在上述问题中,但也许我的$in / @987654332 @落入同一个篮子?)“目前不使用任何索引”。
- 如果我确实在同一条船上,那是什么意思?无法在使用某些谓词的查询上使用索引是 mango 后端 或 pouchdb 的限制吗?
- 我做错了什么/是否有索引解决方法可以避免这种情况?
- 更一般地说,是否有我可以阅读的文档以更深入地了解索引的工作原理以及如何解决它们?
谢谢!
【问题讨论】:
-
你能分享完整的查找电话吗?您是否指定排序?这可能是 pouchdb-find 的限制。直接在 Cloudant 上进行测试时,我没有看到这个问题。你能把你的查询改成这样吗:
selector: { _id: {"$gt":0}, type: {"$in": ["a", "b"]} } -
@markwatsonatx 是完整的查询(没有排序,只是
type上的一个裸选择器)。添加_id: {"$gt":0}就成功了。 1. 你能解释一下发生了什么吗? 2.随意将您的评论转换为答案,我会接受。谢谢! -
当我在选择器上创建索引时,为什么您需要在查询中包含 _id,我也很困惑。
-
@EricShell 我在this couchdb-user mailing-list thread 中询问了这个
_id技巧。事实证明:它不是一种使用索引的方式,恰恰相反:它只是一种明确地告诉 pouchdb-find 我知道我将在没有索引的情况下运行的方式,因为我的查询不适合 CouchDB 的最终 map/reduce + 基于复合键的索引,因此需要获取allDocs并进行内存过滤。我会暂时解决这个问题,然后用“不”回答我的问题。
标签: couchdb pouchdb cloudant couchdb-mango