Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j';s Cypher查询语言-减少匹配中的节点_Neo4j_Cypher - Fatal编程技术网

Neo4j';s Cypher查询语言-减少匹配中的节点

Neo4j';s Cypher查询语言-减少匹配中的节点,neo4j,cypher,Neo4j,Cypher,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) //Subgra

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)
我想写的是一个用于检测以下内容的查询: -有两个或两个以上彼此不认识的人居住在那里的所有地址(和人员)

这意味着只能找到子图1

无法找到子图2,因为有两个人居住在那里,但他们彼此认识

无法找到子图3,因为只有1人居住在那里


再次感谢您的帮助。

这个密码查询应该可以:

MATCH (n1)-[:RESIDES_AT]->()<-[:RESIDES_AT]-(n2)
WHERE NOT exists((n1)-[:KNOWS]-(n2))
RETURN n1, n2

MATCH(n1)-[:RESIDES_AT]->()此密码查询应该可以工作:

MATCH (n1)-[:RESIDES_AT]->()<-[:RESIDES_AT]-(n2)
WHERE NOT exists((n1)-[:KNOWS]-(n2))
RETURN n1, n2

MATCH(n1)-[:RESIDES_AT]->()回答得很好,不过使用
和id(n1)
可能会很有用,以防止在顺序翻转时匹配到相同的节点。或者确实将节点匹配到自身,因此也可能需要
和n1 n2
。有趣的是,我不知道您可以将模式放入notexists(),这意味着你也可以做相反的事情。答案很好,尽管使用
和id(n1)
可能会很有用,以防止在顺序翻转时匹配到相同的节点。或者确实要将节点匹配到自身,所以也可能需要
和n1 n2
。有趣的是,我不知道你可以在notexists()中放置模式,这意味着你也可以做相反的事情。你真的应该使用标签。因为这里没有标签,所以我们可以提供的任何查询解决方案(没有对标签进行假设)都必须检查所有可能节点上的模式,这是无效的。例如,使用:Home节点将确保使用标签索引从:Home节点开始查询,并减少执行时间。我更改了示例您确实应该使用标签。因为这里没有标签,所以我们可以提供的任何查询解决方案(没有对标签进行假设)都必须检查所有可能节点上的模式,这是无效的。例如,使用:Home节点将确保使用标签索引从:Home节点开始查询,并减少执行时间