添加节点标签

在图创建后添加节点标签可用于基于例如算法结果创建标签。与现有标签一样,它们允许在后续操作中过滤图。

语法

CALL gds.graph.nodeLabel.mutate(
    graphName: String,
    nodeLabel: String,
    configuration: Map
)
YIELD
    mutateMillis: Integer,
    graphName: String,
    nodeLabel: String,
    nodeLabelsWritten: Integer,
    nodeCount: Integer,
    configuration: Map
表 1. 参数
名称 类型 可选 描述

graphName

字符串

图在目录中存储的名称。

nodeLabel

字符串

要写回的节点标签。

configuration

映射

配置 writeNodeProperties 的附加参数。

表 2. 配置
名称 类型 默认值 可选 描述

nodeFilter

字符串

不适用

用于过滤输入图中节点的 Cypher 谓词。参见 投影子图

concurrency

整数

4 [1]

用于运行算法的并发线程数。

writeConcurrency

整数

'concurrency'

用于写入节点属性的并发线程数。

1. 在 GDS 会话中,默认值为可用处理器数量

表 3. 结果
名称 类型 描述

mutateMillis

整数

将结果数据写回内存图的毫秒数。

nodeLabel

字符串

添加到内存图的标签名称。

nodeLabelsWritten

整数

写入的节点标签数量。

graphName

字符串

存储在目录中的图的名称。

nodeCount

整数

图中的节点总数。

configuration

映射

用于运行该过程的配置。

示例

以下所有示例都应在空数据库中运行。

示例通常使用 Cypher 投影。原生投影将在未来版本中弃用。

为了演示 GDS 对节点属性的能力,我们将在 Neo4j 中创建一个小型社交网络图,并将其投影到我们的图目录中。

以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (florentin:Person { name: 'Florentin', age: 16 }),
  (adam:Person { name: 'Adam', age: 18 }),
  (veselin:Person { name: 'Veselin', age: 20 }),
  (hobbit:Book { name: 'The Hobbit', numberOfPages: 310 }),
  (florentin)-[:KNOWS { since: 2010 }]->(adam),
  (florentin)-[:KNOWS { since: 2018 }]->(veselin),
  (adam)-[:READ]->(hobbit)
投影小型社交网络图
MATCH (n:Person)-[r:KNOWS|READ]->(m:Person|Book)
RETURN gds.graph.project('socialGraph', n, m,
  {
    sourceNodeLabels: labels(n),
    targetNodeLabels: labels(m),
    sourceNodeProperties: n { .age },
    targetNodeProperties: CASE WHEN m:Person THEN m { .age } ELSE {} END,
    relationshipType: type(r)
  }
)
计算社交图中的度中心性
CALL gds.degree.mutate('socialGraph', {mutateProperty: 'score'})

要通过为分数高于 0 的节点添加新节点标签来修改内存图,我们使用以下查询

Reader 节点标签添加到内存图
CALL gds.graph.nodeLabel.mutate('socialGraph', 'Reader', { nodeFilter: 'n.score > 0.0' })
YIELD graphName, nodeLabel, nodeLabelsWritten, nodeCount
表 4. 结果
graphName nodeLabel nodeLabelsWritten nodeCount

"socialGraph"

"Reader"

2

4

从结果中可以看出,有两个节点匹配了指定的过滤器,并且它们获得了节点标签 Reader。我们可以通过流式传回 Reader 节点标签的 score 属性来检查结果,我们可以使用以下查询来完成此操作

流式传输 Reader 节点的 score 属性
CALL gds.graph.nodeProperty.stream('socialGraph', 'score', ['Reader'])
YIELD nodeId, propertyValue
RETURN gds.util.asNode(nodeId).name AS name, propertyValue AS score
ORDER BY score DESC
表 5. 结果
name score

"Florentin"

2.0

"Adam"

1.0

我们可以看到 Veselin 没有被标记为 Reader,因为该节点的 score 属性为 0

© . All rights reserved.