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 - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Neo4j 图形数据库中检索关系

图形数据库Neo4J简介

如何可视化从嵌入式 Neo4j Java 应用程序创建的 Neo4j 图形数据库

centos 安装neo4j图形数据库

Neo4J 图形数据库中关系属性的更快检索

如何从 java 中获取 Neo4j 图形数据库的节点数,我们可以从磁盘存储和重用 graphdb 吗?