我目前使用的有50000个节点和200万间关系的Neo4j的数据库进行暗号MATCH
查询,像下面这样:限制的Cypher查询
start startnode = node(42660), endnode = node(30561)
match startnode-[r*1..3]->endnode
return r;
此查询本身提供了443行,但我只想要Cypher找到5个匹配并仅返回这些匹配。请允许我澄清:我不仅仅希望Cypher只返回5个结果,我还希望密码一旦找到5个结果就停止查询。我不希望Cypher得到所有443结果。
这是目前使用LIMIT
子句吗?或者LIMIT
等待所有443个结果被发现,那么只返回前5个?
编辑:LIMIT
子句是否会找到像这样的复杂查询的前几个结果?
start graphnode = node(1), startnode = node(42660), endnode = node(30561)
match startnode<-[:CONTAINS]-graphnode-[:CONTAINS]->endnode
with startnode, endnode
match startnode-[r1*1..1]->endnode
with r1, startnode, endnode
limit 30
match startnode-[r2*2..2]->endnode
with r1, r2, startnode, endnode
limit 30
match startnode-[r3*3..3]->endnode
with r1, r2, r3, startnode, endnode
limit 30
return r1,r2,r3;
这里是profile
为查询:
==> ColumnFilter(symKeys=[" UNNAMED216", "endnode", "r1", "startnode", "r2", "r3"], returnItemNames=["r1", "r2", "r3"], _rows=30, _db_hits=0)
==> Slice(limit="Literal(30)", _rows=30, _db_hits=0)
==> PatternMatch(g="(startnode)-[' UNNAMED216']-(endnode)", _rows=30, _db_hits=0)
==> ColumnFilter(symKeys=["endnode", " UNNAMED140", "r1", "startnode", "r2"], returnItemNames=["r1", "r2", "startnode", "endnode"], _rows=1, _db_hits=0)
==> Slice(limit="Literal(30)", _rows=1, _db_hits=0)
==> PatternMatch(g="(startnode)-[' UNNAMED140']-(endnode)", _rows=1, _db_hits=0)
==> ColumnFilter(symKeys=["startnode", "endnode", " UNNAMED68", "r1"], returnItemNames=["r1", "startnode", "endnode"], _rows=1, _db_hits=0)
==> Slice(limit="Literal(30)", _rows=1, _db_hits=0)
==> PatternMatch(g="(startnode)-[' UNNAMED68']-(endnode)", _rows=1, _db_hits=0)
==> NodeById(name="Literal(List(30561))", identifier="endnode", _rows=1, _db_hits=1)
==> NodeById(name="Literal(List(42660))", identifier="startnode", _rows=1, _db_hits=1)
我不确定这是否是正常行为。我尝试了一个复杂的查询'start graphnode = node(1),startnode = node(42660),endnode = node(30561)match startnode < - [:CONTAINS] -graphnode - [:CONTAINS] - > endnode with startnode ,endnode匹配startnode- [r1 * 1..1] - > endnode与r1,startnode,endnode限制30匹配startnode- [r2 * 2..2] - > endnode与r1,r2,startnode,endnode限制30匹配startnode - [r3 * 3..3] - > end1与r1,r2,r3,startnode,endnode限制30返回r1,r2,r3;'。尽管有所有限制,但花费了一分钟的时间才得到结果。 –
我已经把这个复杂的查询放在我的问题中,以方便阅读。 –
更新为新的查询 –