如何搜索连接到 neo4j 中特定顶级节点的所有节点和关系
How to search for all nodes and relationships connected to a specific top node in neo4j
我已经开始使用 neo4j,我的 neo4j 数据库中有多个版本的图(唯一改变的是顶部节点的时间戳)。
我想知道如何只获得与那个节点的关系。我目前使用这个:
"START n=node(*) MATCH (n)-[r]->(m) RETURN n,r,m;"
但这只会显示所有这些。我知道我必须更改 n=node(*) 但我不知道要更改什么。 (顶级节点的名称是:Info)所以可能像
"START n=node(i:Info{timeStamp:'20/04/2018'}) MATCH (n)-[r]->(m) RETURN n,r,m;"
但这只会给我与那个节点的关系...我需要整个图
这样做:
MATCH (n:Info)-[r]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r, m;
为了更快地访问顶级节点,您还应该在 :Info(timeStamp)
上创建一个 index:
CREATE INDEX ON :Info(timeStamp);
[更新]
要使所有关系和节点也达到深度 2,您可以这样做:
MATCH (n:Info)-[r1]->(m1)-[r2]->(m2)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r1, m1, r2, m2;
要使所有关系和节点达到任意深度(比如 5),您可以这样做(每个返回的 path
将是从 n
到子节点):
MATCH path=(n:Info)-[r*..5]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN path;
您也可以只使用 [r*]
进行无限制的可变长度搜索,但这会导致服务器 运行 内存不足或需要很长时间才能完成完成。
我已经开始使用 neo4j,我的 neo4j 数据库中有多个版本的图(唯一改变的是顶部节点的时间戳)。
我想知道如何只获得与那个节点的关系。我目前使用这个:
"START n=node(*) MATCH (n)-[r]->(m) RETURN n,r,m;"
但这只会显示所有这些。我知道我必须更改 n=node(*) 但我不知道要更改什么。 (顶级节点的名称是:Info)所以可能像
"START n=node(i:Info{timeStamp:'20/04/2018'}) MATCH (n)-[r]->(m) RETURN n,r,m;"
但这只会给我与那个节点的关系...我需要整个图
这样做:
MATCH (n:Info)-[r]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r, m;
为了更快地访问顶级节点,您还应该在 :Info(timeStamp)
上创建一个 index:
CREATE INDEX ON :Info(timeStamp);
[更新]
要使所有关系和节点也达到深度 2,您可以这样做:
MATCH (n:Info)-[r1]->(m1)-[r2]->(m2)
WHERE n.timeStamp = '20/04/2018'
RETURN n, r1, m1, r2, m2;
要使所有关系和节点达到任意深度(比如 5),您可以这样做(每个返回的 path
将是从 n
到子节点):
MATCH path=(n:Info)-[r*..5]->(m)
WHERE n.timeStamp = '20/04/2018'
RETURN path;
您也可以只使用 [r*]
进行无限制的可变长度搜索,但这会导致服务器 运行 内存不足或需要很长时间才能完成完成。