我正在评估 RedisGraph,并试图复制我在 Neo4j 中的结果。
图表和查询来自我的另一个问题,我试图达到相同的结果:路径f1 <- (friend) m2 <- (sibling) b3 <- (coworker) d4
(并且没有p*
节点)
节点:
CREATE (a:temporary {name: 'm2'});
CREATE (a:temporary {name: 'f1'});
CREATE (a:temporary {name: 'b3'});
CREATE (a:temporary {name: 'd4'});
CREATE (a:temporary {name: 'p5'});
CREATE (a:temporary {name: 'p6'});
CREATE (a:temporary {name: 'p7'});
CREATE (a:temporary {name: 'k1'});
CREATE (a:temporary {name: 'k2'});
和关系:
MATCH (a) WHERE a.name = 'b3' MATCH (b) where b.name = 'm2' CREATE (a)-[:KNOWS {type: 'sibling'}]->(b);
MATCH (a) WHERE a.name = 'm2' MATCH (b) where b.name = 'f1' CREATE (a)-[:KNOWS {type: 'friend'}]->(b);
MATCH (a) WHERE a.name = 'd4' MATCH (b) where b.name = 'b3' CREATE (a)-[:KNOWS {type: 'coworker'}]->(b);
MATCH (a) WHERE a.name = 'p7' MATCH (b) where b.name = 'p6' CREATE (a)-[:KNOWS {type: 'friend'}]->(b);
MATCH (a) WHERE a.name = 'p6' MATCH (b) where b.name = 'p5' CREATE (a)-[:KNOWS {type: 'coworker'}]->(b);
MATCH (a) WHERE a.name = 'k1' MATCH (b) where b.name = 'b3' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k1' MATCH (b) where b.name = 'd4' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k1' MATCH (b) where b.name = 'm2' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k1' MATCH (b) where b.name = 'f1' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k2' MATCH (b) where b.name = 'p5' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k2' MATCH (b) where b.name = 'p7' CREATE (a)-[:HAS]->(b);
MATCH (a) WHERE a.name = 'k2' MATCH (b) where b.name = 'p6' CREATE (a)-[:HAS]->(b);
原始的 Cypher 查询:
match p=(a:temporary)-[:KNOWS*0..]->(b)
where not ()-[:KNOWS]->(a) and not (b)-[:KNOWS]->()
and exists { match (k)-[:HAS]->(a) where k.name='k1' }
return p
给出以下错误,关于 中的子路径EXISTS
:
Invalid input '(': expected ':', ',' or '}' line: 1, column: 112, offset: 111 errCtx: ... (b)-[:KNOWS]->() and exists { match (k)-[:HAS]->(a) where k.name='k1' } r... errCtxOffset: 40
我已经像这样重写了它(带有附加MATCH
条款:这是否等同于上述内容?
GRAPH.QUERY test "match p=(a:temporary)-[:KNOWS*0..]->(b) where not ()-[:KNOWS]->(a) and not (b)-[:KNOWS]->() with a, p match (k)-[:HAS]->(a) where k.name='k1' return p"