我对neo4j很新,实际上这是我的第一个stackoverflow问题所以请温柔:)
是否有一个优雅的解决方案如何将子图组合成新节点并将这些节点用作一等公民,同时仍然能够将这些节点扩展到它们以前的子图结构中?
背景:我的目标是在图上构建一种类型系统:
我的neo4j图形数据库中有一些子图,它们都满足某种常见模式(某些标签,属性和边缘的组合)。我们将这些命名为{s1,s2,s3,s4}。
现在我想将这些子图与该特定模式(我们将其命名为p1)组合成新节点作为新类型t1的实例。我希望能够查询类型为t1的节点。然后,这些新节点的边缘将是将子图连接到图的其余部分的前边。我仍然希望能够将这些节点扩展到它们以前的子图结构中。此外,我希望能够将一个不同的子图s5(可能甚至包含s1的某些部分)组合成一个类型为t2的新节点。
然后,将t1和t2分组为类型t3,以此类推,以构建抽象数据类型的类型层次结构也是很好的。
到目前为止,我的解决方案是创建一个“容器节点”,它为我的子图节点指定了边,然后以相同的方式将这些容器节点连接到“类型节点”。然后将类型节点连接到类型层次结构。但在我看来,做这件事的方式非常糟糕。也许有更好的方法。
是否有内置解决方案或优雅方式来实现此功能(最好是在neo4j中,还有其他图形数据库中)?
看来你只需要将一个节点label(例如“T1”)添加到属于一个子组的每个节点。
节点可以有多个标签,因此如果节点属于类型层次结构,则可以添加更多标签。
使用标签,您可以轻松找到属于特定子组的节点。例如,要查找“T1”中的所有节点:
MATCH (n:T1)
RETURN n
现有的关系不必改变。