从 Alpha Cypher 聚合到新 Cypher 投影的迁移

谁应该阅读本指南

本指南适用于一直使用 Alpha Cypher 聚合 gds.alpha.graph.project 的用户。现在,Cypher 投影使用 gds.graph.project 聚合函数完成。我们假定大多数提及的操作和概念只需少量解释即可理解。因此,我们在示例和比较中特意保持简洁。请参阅Cypher 投影文档以获取更多详细信息。

API 变更

新的 Cypher 投影替代了 Alpha Cypher 聚合。与 Alpha Cypher 聚合一样,新的 Cypher 投影是一个聚合函数,作为 Cypher 查询的一部分被调用。

API 已进行以下变更

  • 新的 Cypher 投影使用 gds.graph.project 调用,而不是 gds.alpha.graph.project

  • 新的 Cypher 投影定义了一个单一的 map 参数,用于定义与投影相关的信息,例如标签或属性。

    • 仍然有一个独立的 map 参数用于定义图配置。

  • 关系配置 map 中的 properties 键已重命名为 relationshipProperties

  • 额外的验证以减少 API 的误用

    • 验证每个 sourceNode* 条目都有一个相应的 targetNode* 条目,反之亦然。

    • 如果未遵循上述任何一点,识别并帮助迁移到此新 API。

表 1. Alpha 聚合/新投影之间的结构变更
旧版 新版
$query
RETURN gds.alpha.graph.project(
  $graphName,
  sourceNode,
  targetNode,
  $nodeConfig,
  $relationshipConfig,
  $configuration
)
$relationshipQuery
RETURN gds.graph.project(
  $graphName,
  sourceNode,
  targetNode,
  $dataConfig,
  $configuration
)

示例

以下示例不包括在调用聚合函数之前的完整 Cypher 查询,也不包括任何返回字段的 YIELD。这两个方面没有变化。

表 2. 并排比较
Alpha 新版

:无任何配置的投影

...
RETURN gds.alpha.graph.project('g', source, target)
...
RETURN gds.graph.project('g', source, target)

:多图投影

...
RETURN gds.alpha.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    targetNodeLabels: labels(target),
  }, {
    relationshipType: type(r)
  }
)
...
RETURN gds.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    targetNodeLabels: labels(target),
    relationshipType: type(rel)
  }
)

:带属性的图投影

...
RETURN gds.alpha.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    targetNodeLabels: labels(target),
    sourceNodeProperties: source { .age },
    targetNodeProperties: target { .age },
  }, {
    relationshipType: type(rel),
    properties: rel { .numberOfPages }
  }
)
...
RETURN gds.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    targetNodeLabels: labels(target),
    sourceNodeProperties: source { .age },
    targetNodeProperties: target { .age },
    relationshipType: type(rel),
    relationshipProperties: rel { .numberOfPages }
  }
)

:带单边属性的图投影

...
RETURN gds.alpha.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    sourceNodeProperties: source { .age },
  }
)
...
RETURN gds.graph.project(
  'g',
  source,
  target,
  {
    sourceNodeLabels: labels(source),
    targetNodeLabels: NULL,
    sourceNodeProperties: source { .age },
    targetNodeProperties: NULL,
  }
)
© . All rights reserved.