Java Cypher不会重复相同的结果
我有一个密码是这样的:Java Cypher不会重复相同的结果,java,neo4j,cypher,Java,Neo4j,Cypher,我有一个密码是这样的: start n=node(*) match p=n-[r:OWES*1..200]->n return extract(s in relationships(p) : s.amount), extract(t in nodes(p) : t.name), length(p) 该查询返回一个闭合圆中的节点,该圆与深度达200层的关系相连。 结果如下: 2 [155.55, 100641359] [LJUBOJEVIC ST
start n=node(*)
match p=n-[r:OWES*1..200]->n
return extract(s in relationships(p) : s.amount),
extract(t in nodes(p) : t.name),
length(p)
该查询返回一个闭合圆中的节点,该圆与深度达200层的关系相连。
结果如下:
2
[155.55, 100641359]
[LJUBOJEVIC STR I PRZIONA KAFE VL.LJ , SASA , LJUBOJEVIC STR I PRZIONA KAFE VL.LJ ]
2
[100641359, 155.55]
[SASA , LJUBOJEVIC STR I PRZIONA KAFE VL.LJ , SASA ]
3
[100641359, 100641367, 550111.55]
[SASA , LJUBOJEVIC STR I PRZIONA KAFE VL.LJ , ADVOKAT KOSTIC JEVREM VRBAS , SASA ]
3
[100641367, 550111.55, 100641359]
[LJUBOJEVIC STR I PRZIONA KAFE VL.LJ , ADVOKAT KOSTIC JEVREM VRBAS , SASA , LJUBOJEVIC STR I PRZIONA KAFE VL.LJ ]
3
[550111.55, 100641359, 100641367]
[ADVOKAT KOSTIC JEVREM VRBAS , SASA , LJUBOJEVIC STR I PRZIONA KAFE VL.LJ , ADVOKAT KOSTIC JEVREM VRBAS ]
因此,我得到的结果返回次数更多,如果是3个关系级别,我得到3个结果,2我得到2个不同顺序的相同结果。如何更改我的密码,使其在一条路径中只得到一次结果,而不放弃密码中的*。如果不是在cypher中,我可以在Java中以某种方式处理这个问题。这是在使用cypher 2.0,因为我使用的是STARTNODE函数 这有点怪异,但它确实有效。如果不添加一些严格的约束以保持总体集合大小较小,我不会使用它
CREATE
(a {name:'A'}),
(b {name:'B'}),
(c {name:'C'}),
(d {name:'D'}),
(e {name:'E'}),
(f {name:'F'}),
a-[:OWES {amount:100}]->b,
b-[:OWES {amount:200}]->c,
c-[:OWES {amount:300}]->a,
e-[:OWES {amount:400}]->f,
f-[:OWES {amount:500}]->e
start nn=node(*)
MATCH nn-[nr:OWES]->()
WITH nn, nr ORDER BY nn.name, nr.amount
WITH COLLECT([nn, nr.amount]) as sortedPairs
START n=node(*)
match p=n-[r:OWES*1..200]->n
WITH sortedPairs,
extract(s in r: [STARTNODE(s), s.amount]) as pairs
WITH
filter(sp in sortedPairs: ANY(f in pairs WHERE HEAD(f) = HEAD(sp) AND LAST(f) = LAST(sp))) as finalPairs
return distinct
extract(s in finalPairs : HEAD(s)),
extract(s in finalPairs : LAST(s)),
length(finalPairs)
结果:
详细查询结果
查询结果
+----------------------------------------------------------------------------------------------------------------------+
| extract(s in finalPairs : HEAD(s)) | extract(s in finalPairs : LAST(s)) | length(finalPairs) |
+----------------------------------------------------------------------------------------------------------------------+
| [Node[39]{name:"E"},Node[38]{name:"F"}] | [400,500] | 2 |
| [Node[43]{name:"A"},Node[42]{name:"B"},Node[41]{name:"C"}] | [100,200,300] | 3 |
+----------------------------------------------------------------------------------------------------------------------+
2 rows
13 ms
Execution Plan
Distinct(_rows=2, _db_hits=0)
ColumnFilter(symKeys=["sortedPairs", "pairs", "finalPairs"], returnItemNames=["finalPairs"], _rows=5, _db_hits=0)
Extract(symKeys=["sortedPairs", "pairs"], exprKeys=["finalPairs"], _rows=5, _db_hits=0)
ColumnFilter(symKeys=["n", "sortedPairs", " UNNAMED155", "pairs", "p", "r"], returnItemNames=["sortedPairs", "pairs"], _rows=5, _db_hits=0)
Extract(symKeys=["n", "sortedPairs", " UNNAMED155", "p", "r"], exprKeys=["pairs"], _rows=5, _db_hits=13)
ExtractPath(name="p", patterns=[" UNNAMED155=n-[:OWES*1..200]->n"], _rows=5, _db_hits=0)
PatternMatch(g="(n)-[' UNNAMED155']-(n)", _rows=5, _db_hits=0)
AllNodes(identifier="n", _rows=6, _db_hits=6)
ColumnFilter(symKeys=[" INTERNAL_AGGREGATEfbdcf75a-046d-4501-9696-1e2c80469b29"], returnItemNames=["sortedPairs"], _rows=1, _db_hits=0)
EagerAggregation(keys=[], aggregates=["( INTERNAL_AGGREGATEfbdcf75a-046d-4501-9696-1e2c80469b29,Collect)"], _rows=1, _db_hits=5)
ColumnFilter(symKeys=["nr", " UNNAMEDS-2101388511", " UNNAMEDS2003458696", "nn", " UNNAMED39"], returnItemNames=["nn", "nr"], _rows=5, _db_hits=0)
Sort(descr=["SortItem(Cached( UNNAMEDS2003458696 of type Any),true)", "SortItem(Cached( UNNAMEDS-2101388511 of type Any),true)"], _rows=5, _db_hits=0)
Extract(symKeys=["nn", " UNNAMED39", "nr"], exprKeys=[" UNNAMEDS2003458696", " UNNAMEDS-2101388511"], _rows=5, _db_hits=10)
PatternMatch(g="(nn)-['nr']-( UNNAMED39)", _rows=5, _db_hits=0)
AllNodes(identifier="nn", _rows=6, _db_hits=6)
这是使用Cypher2.0,因为我使用了STARTNODE函数 这有点怪异,但它确实有效。如果不添加一些严格的约束以保持总体集合大小较小,我不会使用它
CREATE
(a {name:'A'}),
(b {name:'B'}),
(c {name:'C'}),
(d {name:'D'}),
(e {name:'E'}),
(f {name:'F'}),
a-[:OWES {amount:100}]->b,
b-[:OWES {amount:200}]->c,
c-[:OWES {amount:300}]->a,
e-[:OWES {amount:400}]->f,
f-[:OWES {amount:500}]->e
start nn=node(*)
MATCH nn-[nr:OWES]->()
WITH nn, nr ORDER BY nn.name, nr.amount
WITH COLLECT([nn, nr.amount]) as sortedPairs
START n=node(*)
match p=n-[r:OWES*1..200]->n
WITH sortedPairs,
extract(s in r: [STARTNODE(s), s.amount]) as pairs
WITH
filter(sp in sortedPairs: ANY(f in pairs WHERE HEAD(f) = HEAD(sp) AND LAST(f) = LAST(sp))) as finalPairs
return distinct
extract(s in finalPairs : HEAD(s)),
extract(s in finalPairs : LAST(s)),
length(finalPairs)
结果:
详细查询结果
查询结果
+----------------------------------------------------------------------------------------------------------------------+
| extract(s in finalPairs : HEAD(s)) | extract(s in finalPairs : LAST(s)) | length(finalPairs) |
+----------------------------------------------------------------------------------------------------------------------+
| [Node[39]{name:"E"},Node[38]{name:"F"}] | [400,500] | 2 |
| [Node[43]{name:"A"},Node[42]{name:"B"},Node[41]{name:"C"}] | [100,200,300] | 3 |
+----------------------------------------------------------------------------------------------------------------------+
2 rows
13 ms
Execution Plan
Distinct(_rows=2, _db_hits=0)
ColumnFilter(symKeys=["sortedPairs", "pairs", "finalPairs"], returnItemNames=["finalPairs"], _rows=5, _db_hits=0)
Extract(symKeys=["sortedPairs", "pairs"], exprKeys=["finalPairs"], _rows=5, _db_hits=0)
ColumnFilter(symKeys=["n", "sortedPairs", " UNNAMED155", "pairs", "p", "r"], returnItemNames=["sortedPairs", "pairs"], _rows=5, _db_hits=0)
Extract(symKeys=["n", "sortedPairs", " UNNAMED155", "p", "r"], exprKeys=["pairs"], _rows=5, _db_hits=13)
ExtractPath(name="p", patterns=[" UNNAMED155=n-[:OWES*1..200]->n"], _rows=5, _db_hits=0)
PatternMatch(g="(n)-[' UNNAMED155']-(n)", _rows=5, _db_hits=0)
AllNodes(identifier="n", _rows=6, _db_hits=6)
ColumnFilter(symKeys=[" INTERNAL_AGGREGATEfbdcf75a-046d-4501-9696-1e2c80469b29"], returnItemNames=["sortedPairs"], _rows=1, _db_hits=0)
EagerAggregation(keys=[], aggregates=["( INTERNAL_AGGREGATEfbdcf75a-046d-4501-9696-1e2c80469b29,Collect)"], _rows=1, _db_hits=5)
ColumnFilter(symKeys=["nr", " UNNAMEDS-2101388511", " UNNAMEDS2003458696", "nn", " UNNAMED39"], returnItemNames=["nn", "nr"], _rows=5, _db_hits=0)
Sort(descr=["SortItem(Cached( UNNAMEDS2003458696 of type Any),true)", "SortItem(Cached( UNNAMEDS-2101388511 of type Any),true)"], _rows=5, _db_hits=0)
Extract(symKeys=["nn", " UNNAMED39", "nr"], exprKeys=[" UNNAMEDS2003458696", " UNNAMEDS-2101388511"], _rows=5, _db_hits=10)
PatternMatch(g="(nn)-['nr']-( UNNAMED39)", _rows=5, _db_hits=0)
AllNodes(identifier="nn", _rows=6, _db_hits=6)
谢谢,我也这样做了,我把结果放在两个数组列表中,删除了两个数组。。。以此类推,您的解决方案更加优雅。谢谢谢谢,我也这样做了,我把结果放在两个数组列表中,删除了两个数组。。。以此类推,您的解决方案更加优雅。谢谢