在Neo4j Graph Data Science(GDS)中,每个图都可以有一个对应的投影。如何获得有关存储在特定投影中的实际节点和关系的详细信息?是否有方法可以访问投影中的特定节点和关系数据?
对于一个特定的图目录投影graph_0
,我可以使用CALL gds.graph.list('graph_0')
来检索关于投影的基本信息,比如节点和关系的数量。但是,没有列出有关节点和关系的详细信息。
--添加一个例子来解释更多细节-
1.使用以下cypher命令创建一个简单的图形:
CREATE
(alice:Buyer {name: 'Alice'}),
(instrumentSeller:Seller {name: 'Instrument Seller'}),
(bob:Buyer {name: 'Bob'}),
(carol:Buyer {name: 'Carol'}),
(alice)-[:PAYS { amount: 1.0}]->(instrumentSeller),
(alice)-[:PAYS { amount: 2.0}]->(instrumentSeller),
(alice)-[:PAYS { amount: 3.0}]->(instrumentSeller),
(alice)-[:PAYS { amount: 4.0}]->(instrumentSeller),
(alice)-[:PAYS { amount: 5.0}]->(instrumentSeller),
(alice)-[:PAYS { amount: 6.0}]->(instrumentSeller),
(bob)-[:PAYS { amount: 3.0}]->(instrumentSeller),
(bob)-[:PAYS { amount: 4.0}]->(instrumentSeller),
(carol)-[:PAYS { amount: 5.0}]->(bob),
(carol)-[:PAYS { amount: 6.0}]->(bob)
example graph
1.投射出来
MATCH (source)
OPTIONAL MATCH (source)-[r]->(target)
WITH gds.graph.project(
'graph_0',
source,
target,
{
sourceNodeLabels: labels(source),
targetNodeLabels: labels(target),
relationshipType: type(r)
}
) AS g
RETURN g.graphName AS graph, g.nodeCount AS nodes, g.relationshipCount AS rels
// return:
//graph nodes rels
//"graph_0" 4 10
1.在示例图上运行随机游走算法
MATCH (start:Buyer {name: 'Alice'})
CALL gds.graph.sample.rwr('mySample', 'graph_0', { samplingRatio: 0.66, startNodes: [id(start)] })
YIELD nodeCount, relationshipCount
RETURN nodeCount, relationshipCount
// return:
// nodeCount relationshipCount
// 3 8
1.在该示例中,两个节点之间存在具有相同类型的多个关系,例如Alice
和Instrument Seller
之间的PAYS
。我想知道在此抽样过程中对哪些关系(用关系ID标识)进行了抽样。然而,目前提供的方法只能找出哪种类型的关系被采样,而不是确切的关系ID。
3条答案
按热度按时间x9ybnkn61#
您可以通过从
CALL gds.graph.list()
的输出中产生并返回schemaWithOrientation
等附加字段来获取有关特定本机命名图的扩展信息。例如,schemaWithOrientation
返回投影图中包含的节点标签、关系类型、关系方向和属性。您可以在这里查看完整列表:https://neo4j.com/docs/graph-data-science/current/graph-list/范例:
pqwbnv8z2#
您还可以使用通过流式传输来检查节点的内容(请参阅https://neo4j.com/docs/graph-data-science/current/graph-catalog-node-ops/)。这同样适用于关系(参见https://neo4j.com/docs/graph-data-science/current/graph-catalog-relationship-ops/)。
此外,如果你擅长使用Cypher,你也可以在GDS(https://neo4j.com/docs/graph-data-science/current/management-ops/create-cypher-db/)上试用Cypher。
hmtdttj43#
不幸的是,GDS目前(在GDS 2.4.4中)没有提供一种从投影中获取关系ID的方法。
但有一个有点丑陋的解决方案。您可以向每个感兴趣的关系添加一个特殊属性(比如
_relId
),其中包含该关系的本机ID。然后,您可以在创建投影时包含该属性,并在生成GDS结果后取回该属性。例如,在您的用例中:
_relId
添加到所有关系中(因为它们在您的用例中都是感兴趣的)。_relId
属性。mySample
获取关系,包括本机关系ID(结果中为relNativeId
)。下面是一个示例结果:
警告:如果从数据库中删除一个投影关系,那么它的投影(包括它的
_relId
值)将无效。实际上,旧的_relId
值要么什么都不引用,要么引用一些随机的新关系。