假设您有以下4个节点:
设置1: (操作:“事件日志”,时间戳:3461000) (操作:“正常运行时间报告”,时间戳记:3461000)
设置2: (操作:“事件日志”,时间戳:149100) (操作:“正常运行时间报告”,时间戳记:149100)
我试图弄清楚如何将每组节点映射到一个节点。我尝试了以下Cypher,但所有4个节点都仅映射到一个节点,(a)而不是创建两个(a)节点并分别映射2个集合。是否有必要寻找call()
节点的匹配时间戳的条件?然后,如果时间戳匹配,那么将那些节点链接到(a)?任何帮助将不胜感激。
D::f
答案 0 :(得分:1)
因此,如果我理解正确,那么您希望在act节点中的每个不同时间戳记中都包含一个:Abs节点。为此,我们需要按时间戳聚合行为节点(因此,每个不同的时间戳将只获得一行),然后创建:Abs节点,然后执行FOREACH来创建与新节点的关系。 / p>
MATCH (act)--(obj)
WHERE obj.filename IN ["6013", "6005"]
WITH act.timestamp as timestamp, collect(DISTINCT act) as acts
CREATE (a:Abs{name: 'SigEvent'}) // created per row, so per distinct timestamp
FOREACH (act in acts | CREATE (act)-[:LINK]->(a))
我将匹配模式的一部分移到了seconds
,因为它看起来并不像您在使用。
此查询中存在一个主要问题。由于您没有在匹配模式中使用标签,因此该匹配无法使用任何索引查找,因此此操作将对所有节点进行扫描,这会随着图形的增长而导致糟糕的性能。您至少需要在其中一个标签上贴上标签。看来您打算在obj.filename
上进行索引查找,因此应在MATCH模式中向obj
添加适当的标签,以便可以使用索引(如果已创建)。