Couchbase 中的 N1QL 查询和索引问题
Trouble with N1QL query and index in Couchbase
我有一个简单的 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."
谁能解释一下哪里出了问题?
试试:
SELECT custom_data.xrefId, custom_data.CLSTR, custom_data.CLUSTER_NAME, custom_data.SHORTENED_NAME, custom_data.PRMRY, custom_data.SET_NUM, custom_data.TYPE
FROM `myBucket` AS custom_data
WHERE (`_class` = "com.package.model.ClusterCodeXref");
字符串格式:
"SELECT custom_data.xrefId, custom_data.CLSTR, "
+ "custom_data.CLUSTER_NAME, custom_data.SHORTENED_NAME, "
+ "custom_data.PRMRY, custom_data.SET_NUM, "
+ "custom_data.TYPE "
+ "FROM `myBucket` AS custom_data "
+ "WHERE (`_class` = \"com.package.model.ClusterCodeXref\");"
前导索引键和索引 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
我有一个简单的 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."
谁能解释一下哪里出了问题?
试试:
SELECT custom_data.xrefId, custom_data.CLSTR, custom_data.CLUSTER_NAME, custom_data.SHORTENED_NAME, custom_data.PRMRY, custom_data.SET_NUM, custom_data.TYPE
FROM `myBucket` AS custom_data
WHERE (`_class` = "com.package.model.ClusterCodeXref");
字符串格式:
"SELECT custom_data.xrefId, custom_data.CLSTR, "
+ "custom_data.CLUSTER_NAME, custom_data.SHORTENED_NAME, "
+ "custom_data.PRMRY, custom_data.SET_NUM, "
+ "custom_data.TYPE "
+ "FROM `myBucket` AS custom_data "
+ "WHERE (`_class` = \"com.package.model.ClusterCodeXref\");"
前导索引键和索引 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