【发布时间】:2019-01-01 17:57:23
【问题描述】:
根据我所做的测试,这些似乎是特别大的文档(~2mb),并且当查询使用特定索引(在我的例子中是数组索引)时。
当文档较小时,它似乎工作正常。
这发生在 Couchbase 仪表板、cbq 或我正在使用的 scala SDK 中。
我正在使用 Couchbase 4.6.0 和 内存优化索引。
我有这些与此查询相关的索引:
CREATE INDEX `cache_partial_specific`
ON `content`(`docType`,`entityType`,`entityId`)
WHERE (`docType` = "feedCachePartial") WITH { "defer_build"=true }
CREATE INDEX `feed_cache_partial_meta`
ON `content`(`meta().id`)
WHERE (`docType` = `feedCachePartial`)
CREATE INDEX `cache_partial_index`
ON `content`((distinct (array (`url`.`id`) for `url` in `urls` end)))
WHERE (`docType` = "feedCachePartial") WITH { "defer_build"=true }
最后一个是惹麻烦的
问题:
例如运行时SELECT * FROM content WHERE meta().id = 'cached:topic:297:grp:all'
或
SELECT * FROM content WHERE docType='feedCachePartial' AND entityId=297 and entityType='topic'
它返回文档,我在列表或 urls 中看到 url 13319。
但是在运行的时候
SELECT * FROM content
WHERE docType='feedCachePartial'
AND ANY url IN urls SATISFIES url.id = 13119 END
或条件ANY url IN urls SATISFIES url.id = 13119的任何变化
不返回文档cached:topic:297:grp:all。
max_indexer_doc_size 设置为 20 MB,所以我相信这不是问题(无论哪种方式,在使用其他索引时都会返回)。
查看查询日志时,我看到我正在使用的这个特定索引有 1 个副本(我在这个集群上总共有 3 个索引节点)。
我会调查这个索引并查看哪些文档在索引上调整大小,但我不知道该怎么做。
【问题讨论】:
-
不确定这是否相关,但我有点困惑,为什么您的最后一个查询会检查文档键以外的任何内容。既然知道key,为什么还要加上其他条件呢?
-
您检查过问题是索引而不是查询吗?如果只有主索引,查询返回正确答案会不会很慢?
-
另外,只有在使用带有奇怪字符的名称时才需要反引号,例如 -+%$。我认为您可以删除上述所有陈述中的反引号。
-
@MatthewGroves 这是一个印刷错误,我编辑了它。谢谢
-
@JohanLarson “主索引”指的是什么?我有 3 个与此查询相关的 GSI 索引(urls.id、meta().id、docType),它们都是不同的变体。只有当我在 urls.id 上使用索引时,我才没有得到预期的结果。据我所知,我没有使用反引号,我使用的是单引号。