首页 > 解决方案 > Couchbase 中的 N1QL 查询和索引问题

问题描述

我有一个简单的 N1QL 查询:

"select xrefId, CLSTR, CLUSTER_NAME, SHORTENED_NAME, "
        + "PRMRY, SET_NUM, TYPE from myBucket "
        + "where _class=\"com.package.model.ClusterCodeXref\"

以及相应的二级索引(由于内部原因,我不允许在此存储桶上创建主索引):

CREATE INDEX `idx_xref` ON `myBucket`(`xrefId`,`CLSTR`,`CLUSTER_NAME`,
`SHORTENED_NAME`,`PRMRY`,`SET_NUM`,`TYPE`)
where _class=`com.package.model.ClusterCodeXref` using GSI

然而,当我运行查询(使用 spring-data-couchbase)时,出现以下错误:

"No index available on keyspace myBucket that matches your query. 
Use CREATE INDEX or CREATE PRIMARY INDEX to create an index, or check that your expected index is online."

有人可以解释什么是错的吗?

标签: couchbasespring-data-couchbase

解决方案


查询 WHERE 子句中需要存在前导索引键和索引 WHERE 子句以选择索引。使用反引号的索引 where 子句(它表示文档中的字段)。将它们更改为双引号并添加 _class 作为前导索引键,如下所示。

CREATE INDEX `idx_xref` ON `myBucket`(_class, `xrefId`,`CLSTR`,`CLUSTER_NAME`,
`SHORTENED_NAME`,`PRMRY`,`SET_NUM`,`TYPE`)
where _class="com.package.model.ClusterCodeXref" using GSI

推荐阅读