无法使用 groovy 脚本在 couchbase 上创建主索引

Posted

技术标签:

【中文标题】无法使用 groovy 脚本在 couchbase 上创建主索引【英文标题】:Unable to create primary index on couchbase using groovy script 【发布时间】:2018-02-26 10:15:35 【问题描述】:

我。以下是我使用的代码行:-

@Grab('com.couchbase.client:java-client:2.2.6')

import java.util.concurrent.CountDownLatch;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.CouchbaseCluster
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.SimpleN1qlQuery;
import com.couchbase.client.java.env.CouchbaseEnvironment;
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;

CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).build();
def cluster = CouchbaseCluster.create(env, IPADDRESS);
def bucket = cluster.openBucket(BUCKET_NAME, BUCKET_PASSWORD);
log.info "Connection done"

String queryString = "CREATE PRIMARY INDEX `PrimInd` ON BUCKET_NAME"
bucket.query(N1qlQuery.simple(queryString))

log.info "Primary index created"

它给了我如下错误:-

java.lang.RuntimeException: java.util.concurrent.TimeoutException at this line:-

bucket.query(N1qlQuery.simple(queryString))

连接正确完成,相同的查询在 couchbase 服务器中工作。所以,我认为我的代码有问题。

您能帮我解决这个问题吗?

【问题讨论】:

不应该是"CREATE PRIMARY INDEX `PrimInd` ON `BUCKET_NAME`""CREATE PRIMARY INDEX `PrimInd` ON `$BUCKET_NAME`" 好吧,你的意思是如果 BUCKET_NAME 是演示版,那么我应该使用这个查询吗? - 创建主索引PrimInd ON $demo" 没有。您在脚本的前面使用变量BUCKET_NAME,然后在查询中使用文字BUCKET_NAME 好的,如果我的bucket名字是Demo..查询怎么写? @Simon Baslé - 你能帮我解决这个问题吗? 【参考方案1】:

在 Couchbase Java 客户端中,query() 方法委托给 Blocking API,该 API 在后台使用 JavaRx。阻塞 API 的 source 代码状态:

如果Observable 内部发生错误,则会引发该错误 作为Exception如果出现超时,则会抛出嵌套在 RuntimeException 中的 TimeoutException,以完全兼容 Observable.timeout(long, TimeUnit) 行为。

您遇到了嵌套在RuntimeException 中的TimeoutException,因此根本原因是您的查询超时。

DefaultCouchbaseEnvironmentdefaults 到 75 毫秒的 queryTimeout(N1qlQuery 查询的超时 used)。您可以使用环境构建器更改此默认设置:

def env = DefaultCouchbaseEnvironment.builder()
    .connectTimeout(10000)
    .queryTimeout(10000) // This is the query timeout
    .build()

【讨论】:

我会尝试使用上面的代码并让你知道。感谢您的回复。

以上是关于无法使用 groovy 脚本在 couchbase 上创建主索引的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Jmeter 中运行 Groovy 脚本

Elasticsearch 无法使用 lang groovy 运行内联脚本 [doc ....]

Jenkins 在 groovy 脚本中检索主动选择参数

具有 cbq 和 cbimport 命令组合的 Couchbase 脚本不起作用

批处理脚本中的 groovy 函数参数

无法让 Groovy 扩展模块工作