认为 ,
A、B、C、D 是公司 (companiesName),P1、P2、P3、P4 是母公司 (parentCompanyName)
它们是相关的:
P1 <- sub_of - A ->sells ->B -> sub_of -> P1
P1 <- sub_of - C ->sells-> D -> sub_of -> P2
P3 <- sub_of - A ->sells ->C -> sub_of -> P3
P4 <- sub_of - D ->sells ->B -> sub_of -> P1
P1 <- sub_of - A ->sells2010-> B -> sub_of -> P1
P1 <- sub_of - A ->sells2011-> B -> sub_of -> P4
P1 <- sub_of - A ->in_country-> B -> sub_of -> P1
哪里卖边有属性totalCount 和amount。
如果公司根据第 1、3、5 行有 commonparentNode,我想创建新的边缘,如 sells_I、sells2010_I 等。但在第 6 行 in_country 边缘也满足条件。我不想包括这个边缘。
根据@Stephen 给出的答案:
g = new TinkerGraph()
P1 = g.addVertex("P1")
P2 = g.addVertex("P2")
P3 = g.addVertex("P3")
P4 = g.addVertex("P4")
A = g.addVertex("A")
B = g.addVertex("B")
C = g.addVertex("C")
D = g.addVertex("D")
g.addEdge(A, P1, "SUB_OF")
g.addEdge(B, P1, "SUB_OF")
g.addEdge(C, P1, "SUB_OF")
g.addEdge(D, P2, "SUB_OF")
g.addEdge(A, P3, "SUB_OF")
g.addEdge(C, P3, "SUB_OF")
g.addEdge(D, P4, "SUB_OF")
g.addEdge(B, P4, "SUB_OF")
g.addEdge(A, B, "sells")
g.addEdge(C, D, "sells")
g.addEdge(A, C, "sells")
g.addEdge(D, B, "sells")
g.addEdge(A, B, "sells2010")
g.addEdge(A, B, "sells2011")
g.addEdge(A, B, "IN_COUNTRY")
g.E.has('label','sells').filter{it.inV.out('SUB_OF').next()==it.outV.out('SUB_OF').next()}.transform({[it.inV().next(),it.outV().next()]})
==>[v[C], v[A]]
==>[v[B], v[A]]
x = []
g.E.has('label','sells').filter{it.inV.out('SUB_OF').next()==it.outV.out('SUB_OF').next()}.transform({[it.inV().next(),it.outV().next()]}).dedup().aggregate(x)
for ( i in x ) {
c = i[0]
d = i[1]
g.addEdge(c, d, "sells_I", [amt : 100])
}
是否可以创建新的边缘 sells_I 并在之后像下面那样删除旧的卖出边缘?因为我的原始数据集中有很多边/节点。我可以为此使用 BatchGraph。
下面的查询抛出错误。
g.E.has('label','sells').filter{it.inV.out('SUB_OF').next()==it.outV.out('SUB_OF').next()}.transform({[it.inV().next(),it.outV().next()]}).sideEffect{g.addEdge(it.inVertex, it.outVertex, 'sells_I'); g.removeEdge(it)}
or
g.E.has('label','sells').filter{it.inV.out('SUB_OF').next()==it.outV.out('SUB_OF').next()}.transform({[it.inV().next(),it.outV().next()]}).sideEffect{g.addEdge(it.inV().next(), it.outV().next(), 'sells_I'); g.removeEdge(it)}
有什么建议或帮助吗?
谢谢。:)