【问题标题】:What is wrong with this couchbase index?这个 couchbase 索引有什么问题?
【发布时间】:2019-07-29 21:43:15
【问题描述】:

我创建了这个 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 * 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 build 1693

感谢您的帮助

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

    用这个索引解决了(我只删除了 distinct 和 array 之间的 ALL)

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

    【讨论】:

    • 查询中的“WHERE”子句需要与您的索引相匹配,最初您的查询为“ANY”,但您的索引为“ALL”。确保这两个匹配是需要小心的。
    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2017-06-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2011-06-12
    相关资源
    最近更新 更多