gpt4 book ai didi

neo4j - 使用变量 MATCH 标签动态创建 Neo4j/Cypher 关系

转载 作者:行者123 更新时间:2023-12-04 01:51:16 35 4
gpt4 key购买 nike

我需要在现有节点之间创建关系,并尝试关注 youtube 上关于创建动态节点和关系的内容:https://www.youtube.com/watch?v=KsAb8QHClNg几次,但我认为它们没有涵盖我的用例。

示例数据:

SOURCE  TARGET  LABEL   TYPE    SOURCE_TYPE TARGET_TYPE SOURCE_KEY  TARGET_KEY  PHLEVEL COLOR   SIZE    SCOPE
16 1 ERKRS_ROOT DIRECTED ERKRS ROOT ERKRS_R300 ROOT_EC3_800 0 #808080 1 FALSE
12 1 ERKRS_ROOT DIRECTED ERKRS ROOT ERKRS_INT1 ROOT_EC3_800 0 #808080 1 FALSE
51 1 KKBER_ROOT DIRECTED KKBER ROOT KKBER_GVK1 ROOT_EC3_800 0 #808080 1 FALSE
31 1 KKBER_ROOT DIRECTED KKBER ROOT KKBER_6000 ROOT_EC3_800 0 #808080 1 FALSE
71 1 FIKRS_ROOT DIRECTED FIKRS ROOT FIKRS_1000 ROOT_EC3_800 0 #808080 1 FALSE
334 9 KOKRS_ERKRS DIRECTED KOKRS ERKRS KOKRS_2000 ERKRS_IDEA 1 #808080 1 FALSE
335 9 KOKRS_ERKRS DIRECTED KOKRS ERKRS KOKRS_2200 ERKRS_IDEA 1 #808080 1 FALSE
342 9 KOKRS_ERKRS DIRECTED KOKRS ERKRS KOKRS_4500 ERKRS_IDEA 1 #808080 1 FALSE

我已经使用 apoc.create.node 和我的节点文件成功地动态创建了节点。节点标签 = SOURCE_TYPE 或 TARGET_TYPE。节点的 KEY 属性 = SOURCE_KEY 或 TARGET_KEY。关系是 LABEL 列。

现在我面临创建关系的挑战,因为 MATCH 子句不接受我文件中的标签 - 这是我的脚本:

USING PERIODIC COMMIT 500 LOAD CSV WITH HEADERS  FROM 'file:///IDES__Edges1.csv' AS line
MATCH (x:line.SOURCE_TYPE {key:line.SOURCE_KEY}), (y:line.TARGET_TYPE {key:line.TARGET_KEY})
CALL apoc.create.relationship(x, line.LABEL, y) YIELD rel RETURN count(*)

我收到这个错误...

    Neo.ClientError.Statement.SyntaxError: Invalid input '.': expected an identifier character, whitespace, NodeLabel, a property map, ')' or a relationship pattern (line 2, column 15 (offset: 103))
" MATCH (x:line.SOURCE_TYPE {key:line.SOURCE_KEY}), (y:line.TARGET_TYPE {key:line.TARGET_KEY})"

有没有人知道如何处理这个问题?我快要解决我的问题了!任何帮助表示赞赏。约翰

最佳答案

这说明了为什么建议按节点类型处理单独的 CSV 文件,这样您将始终能够知道要将哪个标签硬编码到您的查询中。

这是 Cypher 的一个要求,因为当标签被硬编码时,规划器利用数据库中的元数据来帮助如何有效地规划查询执行(动态标签的评估必须在期间执行...这对于必须在 执行之前计划查询的计划者来说是无用的)。

对于这种情况,最好向添加的每种类型的所有节点添加第二个更通用的标签,然后使用 key 属性创建索引,然后通用标签,并在创建关系时使用该通用标签进行查找。

所以在应用了通用标签(我们暂时称它为 :Node)并在 :Node(key) 上创建索引之后,它就像这样简单:

USING PERIODIC COMMIT 500 LOAD CSV WITH HEADERS  FROM 'file:///IDES__Edges1.csv' AS line
MATCH (x:Node {key:line.SOURCE_KEY}), (y:Node {key:line.TARGET_KEY})
CALL apoc.create.relationship(x, line.LABEL, y) YIELD rel
RETURN count(*)

这当然假设键在具有所有给定标签的所有节点中是唯一的。如果不是这种情况,则需要采用不同的方法。

关于neo4j - 使用变量 MATCH 标签动态创建 Neo4j/Cypher 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939853/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com