繁体   English   中英

neo4j-查找具有强关系的节点

[英]neo4j - find nodes with strong relationship

我在图形中将地点和人作为标签,并且具有“ knows_the_place”关系。 喜欢:

(person)-[knows_the_place]->(place) 

一个人通常知道多个地方。

现在,我想通过地点(具有很多“地点”的共同点)找到具有“强”关系的人,例如,我想查询共享至少3个不同地点的所有人。 (不起作用!)查询:

MATCH
(a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person),
(a:person)-[:knows_the_place]->(y:place)<-[:knows_the_place]-(b:person),
(a:person)-[:knows_the_place]->(z:place)<-[:knows_the_place]-(b:person)
WHERE NOT x=y and y=z
RETURN a, b

如何使用neo4j Query执行此操作?

奖励-问题:

如果可以得到像以下这样的订单列表,则不给我显示与另一个人有x个共同点的人,甚至更好。

a与BC共享7位,与bd共享5位,与ef共享2位,与a共享1位...

谢谢你的帮助!

干得好:

MATCH (a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person)
WITH a, b, count(x) AS count
WHERE count >= 3
RETURN a, b, count

订购:

MATCH (a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person)
RETURN a, b, count(x) AS count
ORDER BY count(x) DESC

您也可以通过将ORDER BY添加到第一个查询的两者来完成这两个操作。

请记住,这个查询的笛卡尔积ab所以它会检查的每个组合person节点,这可能不是很大的性能,明智的,如果你有很多的person节点。 Neo4j 2.3应该警告您有关此类查询的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM