openCypher 复杂路径模式支持

问题描述 投票:0回答:1

我想知道 openCypher 中是否有类似正则表达式的路径模式支持更复杂的路径查询。以下是一些示例:

  1. 具有替代关系的路径,例如关注-喜欢-关注-喜欢-...
    应该这样写:

    MATCH path = ( startUser : User { name : ' Adam '})-[: (Follows·Likes)* ] - >( endUser : User )

    RETURN path

  2. 节点之间具有多种关系的路径,例如Follows&Likes-Follows&Likes...

    应该这样写:

    MATCH path = ( startUser : User { name : ' Adam '})-[: (Follows&Likes)* ] - >( endUser : User )

    RETURN path

  3. 具有混合关系且其中之一仅限于在特定时间出现的路径,例如关注-喜欢有多个关注但只有 5 个喜欢。
    应该这样写:

    MATCH path = ( startUser : User { name : ' Adam '})-[: Follows*|Likes*5] - >( endUser : User )

    RETURN path

  4. 一条具有混合关系的路径,其中一个关系仅限于出现在某个位置,就像一条以 5 个“赞”结束的“关注点赞”链。
    应该这样写:

    MATCH path = ( startUser : User { name : ' Adam '})-[: Follows*·Likes*5] - >( endUser : User )

    RETURN path

据我所知,openCypher 支持 Follows* 和 (Follows|Knows)*,但不支持连接。这是否意味着它在查询路径时不支持复杂的表达式?因为它似乎只从一个或一组关系中进行选择,但对具有多个关系的路径没有任何顺序或计数控制。

graph-databases opencypher
1个回答
1
投票

对于一般文档,我认为这是一个很好的起点 https://neo4j.com/docs/cypher-manual/current/patterns/concepts/#quantified-path-patterns,然后在谷歌上搜索“Cypher Quantified Pattern”模式”应该会发现更多我期望的内容。

例如,这就是您执行上述 1 的方法:

MATCH path = (startUser:User {name:'Adam'})
             (()-[:Follows]->()-[:Likes]->())*
             (endUser:User)
RETURN path
© www.soinside.com 2019 - 2024. All rights reserved.