Проблема с запросом N1QL и индексом в Couchbase - PullRequest
0 голосов
/ 04 июня 2018

У меня простой запрос 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."

Может кто-нибудь объяснить, что не так?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Ключ начального индекса и предложение Index WHERE должны присутствовать в предложении Query 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
0 голосов
/ 04 июня 2018

Попробуйте:

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");

В формате String:

"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\");"
...