【问题标题】:Couchbase Indexing for Nested array query用于嵌套数组查询的 Couchbase 索引
【发布时间】:2017-01-18 05:38:53
【问题描述】:

我正在尝试通过数组索引来加速下面的查询,但我无法正确完成。

SELECT count(*) FROM pacientes UNNEST COMPOSITION.content contentItem 
WHERE contentItem.items IS NOT NULL AND ANY i WITHIN contentItem.items 
SATISFIES i.archetype_id="at0007" AND i.`value`.`value` < 200 AND 
i.`value`.`value` > 100 END;

我已尝试创建以下索引,但没有一个有效:

CREATE INDEX idx_item_value ON pacientes (ARRAY i FOR i IN 
COMPOSITION.content.items.`value`.`value` WHEN i.archetype_id="at0007" END);

CREATE INDEX idx_item ON pacientes
(ARRAY i FOR i IN COMPOSITION.content.items END);

CREATE INDEX idx_item ON pacientes UNNEST COMPOSITION.content contentItem
(ARRAY i FOR i IN contentItem.items WHEN i.archetype_id="at0007" END);

有什么建议吗?

【问题讨论】:

    标签: arrays indexing couchbase n1ql


    【解决方案1】:

    在您的 CREATE INDEX 语句中,使用 DISTINCT ARRAY 而不是 ARRAY。

    这是修改后的查询和索引。

    SELECT count(*)
    FROM pacientes AS p
    UNNEST COMPOSITION.content AS contentItem
    WHERE
            ANY ci IN p.COMPOSITION.content SATISFIES
                ( ANY i WITHIN ci.items SATISFIES
                    i.archetype_id="at0007"
                    AND i.`value`.`value` < 200
                    AND i.`value`.`value` > 100 END
                )
            END
    ;
    
    CREATE INDEX idx_archetype ON pacientes( DISTINCT ARRAY ( DISTINCT ARRAY i.archetype_id FOR i WITHIN ci.items END ) FOR ci IN COMPOSITION.content END );
    
    CREATE INDEX idx_value ON pacientes( DISTINCT ARRAY ( DISTINCT ARRAY i.`value`.`value` FOR i WITHIN ci.items END ) FOR ci IN COMPOSITION.content END );
    

    【讨论】:

    • 我已经尝试过使用 DISTINCT,查询无论如何都不使用索引。
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多