Что не так с этим индексом couchbase?

#couchbase #n1ql

#couchbase #n1ql

Вопрос:

я создал этот индекс couchbase

 CREATE INDEX `idx_additionalOrderCode` ON 
`order`(ALL ARRAY s.`value` FOR s IN additionalOrderCode WHEN s.`typeCode`= "MYCODE" END)
WHERE _class = "com.entrprise.OrderEntity" 
  

на основе примера на этой странице

https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/indexing-arrays.html

но когда я запрашиваю этот индекс с помощью этого запроса select :

 SELECT * FROM `order` 
WHERE `_class` = "com.entrprise.OrderEntity" 
AND ANY s IN additionalOrderCode SATISFIES ( s.`value` = "130047777" ) and (s.typeCode = "MYCODE" ) END
  

я получаю сообщение об ошибке

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

Ни один первичный индекс не поддерживает запрос, я хочу, чтобы все мои запросы поддерживались вторичными индексами.

Я использую Enterprise Edition 6.0.0, сборку 1693

Спасибо за вашу помощь

Ответ №1:

решил проблему с помощью этого индекса (я только удалил ВСЕ между distinct и array)

 CREATE INDEX `idx_additionalOrderCode` ON `order`
 (distinct (array (aoc.`value`) for `aoc` in `additionalOrderCode` WHEN aoc.`typeCode`= "WLEC"  END), orderTypeCode)
 WHERE (`_class` = "com.entreprise.OrderEntity")
  

Комментарии:

1. Предложение ‘WHERE’ в вашем запросе должно соответствовать вашему индексу, и изначально в вашем запросе было ‘ANY’, но в вашем индексе было ‘ALL’. Нужно быть осторожным, чтобы убедиться, что эти два индекса совпадают.