1.2子图(subgraph)
子图,就是一个集合,可以包括节点、关系和walkable对象(后面会介绍)。
下面是一个创建子图的例子
>>> s = ab | ac
>>> s
{(alice:Person {name:"Alice"}),
(bob:Person {name:"Bob"}),
(carol:Person {name:"Carol"}),
(Alice)-[:KNOWS]->(Bob),
(Alice)-[:WORKS_WITH]->(Carol)}
>>> s.nodes()
frozenset({(alice:Person {name:"Alice"}),
(bob:Person {name:"Bob"}),
(carol:Person {name:"Carol"})})
>>> s.relationships()
frozenset({(Alice)-[:KNOWS]->(Bob),
(Alice)-[:WORKS_WITH]->(Carol)})
子图作为一个集合,就可以进行python的set对象的一些操作:
subgraphA | subgraphB | ... #并集(Union)
subgraphA & subgraphB & ... #交集(Intersection)
subgraphA - subgraphB - ... #差集(Difference)
subgraphA ^ subgraphB ^ ... #对等差分(Symmetric difference),只在A或B中存在的元素集合,不包括同时存在于A和B中的元素;也就是并集和交集的差集。。。
另外还可以进行一些图数据库相关的操作
subgraph.keys()
subgraph.labels
subgraph.nodes
subgraph.relationships
subgraph.types()
1.3 walkable对象
Walkable对象是一种Subgraph对象,但是附加了遍历信息,用walk() 函数就可以遍历walkable对象,返回节点-关系-节点-关系…-节点的信息流,总是从节点出发,到节点结束,中间是节点关系交替出现。
下面是代码示例,用“+”可以连接起图对象,构建walkable对象
>>> w = ab + Relationship(b, "LIKES", c) + ac
>>> w
(Alice)-[:KNOWS]->(Bob)-[:LIKES]->(Carol)<-[:WORKS_WITH]-(Alice)
用walk()遍历上面构建的walkable对象w
walk(w)
一些其他操作如下
w.start_node
w.end_node
w.nodes
w.relationships
还有一个path对象,也是一种walkable对象,它接受cypher查询语句,返回walkable的查询结果