【发布时间】:2017-08-24 21:00:12
【问题描述】:
对于 Neo4j 来说相对较新。我意识到我最初发布这个的方式太模棱两可了。希望下面是一个更好的解释。
//Subgraph 1
Create (p1:Person {name: 'Person1'})
Create (p2:Person {name: 'Person2'})
Create (a1:Address {street: 'Suspicious'})
Create (p1)-[:Resides]->(a1)
Create (p2)-[:Resides]->(a1)
//Subgraph 2
Create (p3:Person {name: 'Person3'})
Create (p4:Person {name: 'Person4'})
Create (a2:Address {street: 'Double'})
Create (p3)-[:Resides]->(a2)
Create (p4)-[:Resides]->(a2)
Create (p3)-[:Knows]->(p4)
//Subgraph 3
Create (p5:Person {name: 'Person5'})
Create (a3:Address {street: 'Single'})
Create (p5)-[:Resides]->(a3)
我想写的是一个查询来检测以下内容: - 有 2 个或更多人居住在那里但彼此不认识的所有地址(和人)。
这意味着应该只找到 Subgraph1。
找不到 Subgraph2,因为有 2 个人住在那里,但他们彼此认识。
找不到 Subgraph3,因为那里只有 1 个人。
再次感谢您的帮助。
【问题讨论】:
-
你真的应该使用标签。由于您在这里没有标签,因此我们可以提供的任何查询解决方案(不对标签做出假设)都必须检查所有可能节点上的模式,这效率不高。例如,使用 :Home 节点将确保查询将使用标签索引从 :Home 节点开始,并将减少执行时间。
-
我已经更改了示例