目前是否可以在 redis-graph 中进行匹配交集查询?
Is it currently possible to do match intersection queries in redis-graph?
鉴于当前的 Cypher 限制,目前是否可以在 RedisGraph 中查询匹配交集?
例如,相当于以下 Cypher 脚本的东西 return Mor Yesharim 和 Noam Nativ 都访问过的国家:
MATCH (p:Person)-[x:VISITED]->(c:Country)
WHERE p.name = 'Mor Yesharim' OR p.name = 'Noam Nativ'
WITH c, count(DISTINCT p) as cnt
WHERE cnt = 2
RETURN c
您提供的示例可以用单一模式重写,如下所示:
MATCH (p:Person)-[:VISITED]->(c:Country)<-[:VISITED]-(q:person)
WHERE p.name = 'Mor Yesharim' AND q.name = 'Noam Nativ'
RETURN c
然而,这对于更复杂的模式不可行(例如,如果 Country
的入度大于 2)。在这些情况下,您可以结合使用 WITH
和 ID 匹配:
MATCH (p:Person)-[:VISITED]->(c:Country)
WHERE p.name = 'Mor Yesharim' WITH c AS first
MATCH (q:Person)-[:VISITED]->(d:Country)
WHERE q.name = 'Noam Nativ'
AND ID(first) = ID(d)
RETURN d
鉴于当前的 Cypher 限制,目前是否可以在 RedisGraph 中查询匹配交集?
例如,相当于以下 Cypher 脚本的东西 return Mor Yesharim 和 Noam Nativ 都访问过的国家:
MATCH (p:Person)-[x:VISITED]->(c:Country)
WHERE p.name = 'Mor Yesharim' OR p.name = 'Noam Nativ'
WITH c, count(DISTINCT p) as cnt
WHERE cnt = 2
RETURN c
您提供的示例可以用单一模式重写,如下所示:
MATCH (p:Person)-[:VISITED]->(c:Country)<-[:VISITED]-(q:person)
WHERE p.name = 'Mor Yesharim' AND q.name = 'Noam Nativ'
RETURN c
然而,这对于更复杂的模式不可行(例如,如果 Country
的入度大于 2)。在这些情况下,您可以结合使用 WITH
和 ID 匹配:
MATCH (p:Person)-[:VISITED]->(c:Country)
WHERE p.name = 'Mor Yesharim' WITH c AS first
MATCH (q:Person)-[:VISITED]->(d:Country)
WHERE q.name = 'Noam Nativ'
AND ID(first) = ID(d)
RETURN d