作为 ETL 过程的一部分,我正在尝试从 Couchbase 存储桶(Couchbase Enterprise 4.5)中读取所有文档密钥 ID。这个桶可能有几千万个文档。为了测试这一点(在这个阶段,我只是想看看这种方法是否足够快以满足我们的需求),我使用如下代码设置一个大的 serverSideTimeout 值:
final N1qlParams n1qlParams = N1qlParams.build().serverSideTimeout(1L, TimeUnit.DAYS);
aBucket.query(N1qlQuery.simple("select meta(b).id from `my_bucket` as b", n1qlParams))
这开始执行,我的订阅者开始从查询中获取 id,但随后我收到此错误:
{"msg":"Index scan timed out - cause: Index scan timed out","code":12015}
我对它需要进行索引扫描并不感到惊讶,因为我实际上是在尝试读取主索引中的所有内容。这里关于“索引扫描超时”的明显相关问题在评论中提到有一个设置来调整索引扫描超时值,但我找不到这个设置在哪里。我查看了 N1qlParams 对象、CouchbaseEnvironment 以及 Couchbase 管理 UI 中集群设置的索引设置部分,但在任何地方都找不到此设置。对于希望进行全索引扫描的查询,如何将索引扫描超时设置为更长的值?