【问题标题】:Neo4j / Cypher : issue with multiple match in cypher queryNeo4j / Cypher:密码查询中的多重匹配问题
【发布时间】:2013-11-11 10:11:57
【问题描述】:

密码查询和多重匹配有一些我没有得到的东西。

上下文:

target = node(2145) = 应用上的视频游戏

me = node(2570) = 用户登录

我正在尝试获取与给定目标交互的所有用户(包括我)。 此外,我希望这些用户按他们和我之间的距离排序......

即目标是显示与视频游戏互动的用户:首先是我和我的朋友,然后是其他人。

我的查询:

START target=node(2145), me=node(2570)
MATCH (target)-[:INTERACTIONS]->()<-[:IS_TARGET_OF]-(interactions)<-[:IS_SOURCE_OF]-()<-[:INTERACTIONS]-(users)
WITH me, users
MATCH p = (users)-[:CONTACTS]->()-[?:IS_FRIEND_WITH*0..3]-()<-[:CONTACTS]-(me)
RETURN users, MIN(LENGTH(p)) as conn
ORDER BY conn ASC

问题:

考虑到我是唯一与目标交互的人,我应该得到一个结果:2570。

我遇到的问题是在返回的用户中没有看到“我”:查询没有返回任何内容

我尝试了什么:

  • 如果我在第一场比赛后立即返回,我会得到一个结果:2570。
  • 如果在第二场比赛中,我尝试 p = (users)-[*0..3]-(me),我也会得到一个结果:2570。

  • 如果我只使用查询的第二部分来尝试以下操作:

    START me=node(2570), users=node(2570, 2802)
    MATCH p = me-[:CONTACTS]->()-[?:IS_FRIEND_WITH*0..3]-()<-[:CONTACTS]-(users)
    RETURN users, MIN(LENGTH(p)) as conn
    ORDER BY conn ASC
    

    我得到 2570 和 2802(因为他是我的朋友)。

我确定我在这里做错了什么,但我看不出是什么..你知道如何解决我的问题吗?

谢谢,

【问题讨论】:

    标签: neo4j match cypher


    【解决方案1】:

    就您的实验而言,第二个模式匹配与“开始”一起正常工作。所以你可以像这样将第二个匹配和第一个匹配组合成一个连词,

    START target=node(2145), me=node(2570)
    MATCH (target)-[:INTERACTIONS]->()<-[:IS_TARGET_OF]-(interactions)<-[:IS_SOURCE_OF]-()<-[:INTERACTIONS]-(users), p = (users)-[:CONTACTS]->()-[?:IS_FRIEND_WITH*0..3]-()<-[:CONTACTS]-(me)
    RETURN users, MIN(LENGTH(p)) as conn
    ORDER BY conn ASC  
    

    这应该返回节点“我”作为结果。

    至于第二个模式为什么不能与“With”子句一起使用,我认为问题是当“用户”和“我”指的是同一个节点时,模式变成了这样,

    (我)-[:联系人]->(x)

    要匹配这样的模式,从“我”开始,必须遍历相同的关系才能回到“我”,但遍历不应该经过相同的关系。所以如果“我”和“用户”是相同的,那么“我”就不会匹配第二个模式。

    至于为什么它与“开始”子句一起使用,我的猜测是,将从两个给定的终点“用户”和“我”分开开始两次遍历,并且两者在中间相遇以测试模式()-[?:IS_FRIEND_WITH*0..3]-(),所以不会有再遍历同一个关系的问题,因为它们是两个独立的遍历。

    【讨论】:

    • 非常感谢丽莎,我使用了您的查询,它结合了第二个和第一个匹配项,这非常有效。再次,您的解释清楚,谢谢!
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多