Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?
Posted
技术标签:
【中文标题】Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?【英文标题】:Neo4j - Graph Data Science library - How to cypher-query against a named graph in Graph Catalog? 【发布时间】:2020-09-22 20:58:10 【问题描述】:从 Neo4j 主图创建命名图是 documented。此外,人们还知道如何列出、删除、检查命名图是否已经存在,例如CALL gds.graph.exists('my-store-graph') YIELD exists;
但是,我想知道是否有任何方法可以对刚刚创建的命名图进行密码查询?
一种解决方法是将此命名图推送到 离线/空 Neo4j 图中,即CALL gds.beta.graph.export('my-graph', dbName: 'mydatabase' )
。但是,这种方法不太方便,因为我们经常想在应用之前检查命名图是否正确投影,例如PageRank 就可以了。并且预测可以是一个反复试验的循环。
【问题讨论】:
【参考方案1】:除了您已经找到的解决方法之外,目前没有其他方法可以查询命名图。
但是,还有其他功能,例如gds.util.nodeProperty
允许您访问命名图中的节点属性,而无需将其写回 Neo4j。查询score
属性的示例如下所示:
CALL gds.graph.create('my-graph', 'User', 'LINK');
CALL gds.pageRank.mutate('my-graph', mutateProperty: 'score' );
MATCH (user:User)
WHERE user.name = 'Alice'
RETURN
user.name AS name,
gds.util.nodeProperty('my-graph', id(user), 'score') AS score
您能否详细说明为什么您的预测是“试错”循环。也许一个选项是在您要投影的子图上运行验证查询?
【讨论】:
在我看来,这是一个反复试验的循环,因为使用 Cypher 的投影会产生子图。并且您想仔细检查子图结构是否在某些方面是预期的。目前,我们不能方便地对这个子图进行密码查询。 @JoyfulPanda 如果我理解正确,您使用 Cypher 投影来创建图形,然后您想检查创建的图形以确保它是您所期望的?直接检查您在graph.create.cypher()
调用中使用的 Cypher 查询是否不能提供必要的见解?
@s1ck 正确。我想确保投影图符合我的预期。在CALL gds.graph.create.cypher(graphName, nodeQuery, relationshipQuery, configuration)
中,一个需要 2 个查询:一个用于节点,一个用于关系。我假设它首先提取节点,然后提取关系,并且删除其节点未包含在第一组中的任何关系。因此,有时不方便对关于投影图形状的 2 个单独查询进行推理。一个人可能会错过一些东西......
@JoyfulPanda 明白,我同意。预计未来版本会改进这一点:)一个细节:节点不在第一组中的关系将在 GDS 1.2 中引发错误,您可以使用配置参数将其更改为静默删除行为。以上是关于Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?的主要内容,如果未能解决你的问题,请参考以下文章