GDS 虚拟图与组件查询不同

问题描述 投票:0回答:1

我正在使用 Neo4j Enterprise v 4.3 和 gds 插件 v 1,7.0。我创建了一个虚拟图,如下:

 CALL gds.graph.create.cypher(
  "match_seg",
  "MATCH (d:DNA_Match) where d.ancestor_rn=33454
   RETURN id(d) AS id",
   "MATCH (m:DNA_Match{ancestor_rn:33454)-[r:match_segment]->(s:Segment{chr:'01'}) where r.cm>=7 and r.snp_ct>=500
   RETURN
     id(m) AS source,
     id(s) AS target,
     r.cm AS weight",
  {
    readConcurrency: 4,
    validateRelationships:FALSE
  }
)

它返回节点数为 29,关系数为零。

然而,当我在 Neo4j 中运行各个查询时,我得到了不同的结果。

MATCH (d:DNA_Match) where d.ancestor_rn=33454
   RETURN id(d) AS id

返回 29 个节点

但是这里有一个明显的异常:

MATCH (m:DNA_Match{ancestor_rn:33454})-[r:match_segment]->(s:Segment{chr:'01'}) where r.cm>=7 and r.snp_ct>=500
   RETURN
     id(m) AS source,
     id(s) AS target,
     r.cm AS weight

这将返回 8726 行。

为什么我看不到虚拟图表中的关系?

neo4j
1个回答
1
投票

你的问题是你只投影一个节点:

MATCH (d:DNA_Match) where d.ancestor_rn=33454
RETURN id(d) AS id

GDS 库会删除源节点和目标节点都不存在的所有关系。你会想做一些类似的事情:

 CALL gds.graph.create.cypher(
  "match_seg",
  "MATCH (d:DNA_Match) where d.ancestor_rn=33454
   RETURN id(d) AS id
   UNION
   MATCH (m:DNA_Match{ancestor_rn:33454)-[r:match_segment]-> 
   (s:Segment{chr:'01'}) where r.cm>=7 and r.snp_ct>=500
   RETURN id(s) as id",
   "MATCH (m:DNA_Match{ancestor_rn:33454)-[r:match_segment]->(s:Segment{chr:'01'}) where r.cm>=7 and r.snp_ct>=500
   RETURN
     id(m) AS source,
     id(s) AS target,
     r.cm AS weight",
  {
    readConcurrency: 4,
    validateRelationships:FALSE
  }
)
© www.soinside.com 2019 - 2024. All rights reserved.