Couchbase群集的SearchQuery不适用于Go客户端的v2版本

问题描述 投票:0回答:2

我正在尝试对其中一个存储桶执行搜索。我用最少的配置初始化了集群,还设置了FTS的大小,并将FTS添加到了服务中。然后,我使用最少的选项连接到集群:

cluster, err = gocb.Connect(settings.CouchbaseConnectionString, gocb.ClusterOptions{
    Username: settings.CouchbaseUser,
    Password: settings.CouchbasePassword,
})

然后,我想按以下方式进行搜索(此时与查询无关):

rows, err := cluster.SearchQuery("fts_index", query, nil)
if err != nil {
    log.Printf("View query error: %s\n", err)
    return 0
}

结果:

View query error: failed to get query provider: the cluster does not support cluster-level queries (only Couchbase Server 6.5 and later) and no bucket is open. If an older Couchbase Server version is used, at least one bucket needs to be opened...

这说明了实际的问题,但是当我在操作之前打开存储桶时,将引发以下错误:

View query error: failed to get query provider: not connected to cluster...

我调试了代码,并且查询检查了GCCCP轮询,因此当未打开存储桶时,群集的clusterClient的字段设置为一个值,因此GCCCP支持可以读取它,但是它告诉我们不支持,所以抛出了第一个错误。打开存储桶后,群集的clusterClient设置为nil,因此引发第二个错误。

任何想法我如何进行搜索?

版本:

  • Couchbase:6.5.1
  • gocb:2.1.1
go couchbase
2个回答
0
投票

看来您需要先按照https://docs.couchbase.com/go-sdk/current/hello-world/start-using-sdk.html中的说明打开存储桶


0
投票

我找到了一个相关的issue,在这里代码必须正确连接到集群的存储桶,我必须等待。

解决方案:

bucket := cluster.Bucket("bucket")
bucket.WaitUntilReady(30*time.Second, &gocb.WaitUntilReadyOptions{DesiredState: gocb.ClusterStateOnline})
rows, err := cluster.SearchQuery("fts_index", query, nil)
// ...

重要的部分是WaitUntilReady

© www.soinside.com 2019 - 2024. All rights reserved.