私は現在、MATCH
以下のような暗号クエリを実行するために、50000 のノードと 200 万のリレーションシップを持つ neo4j データベースを使用しています。
start startnode = node(42660), endnode = node(30561)
match startnode-[r*1..3]->endnode
return r;
このクエリ自体は 443 行を提供しますが、Cypher に 5 つの一致を見つけてそれらのみを返すようにしたいだけです。明確にさせてください: Cypher に 5 つの結果のみを返すだけではなく、5 つの結果が見つかったら cypher がクエリを停止することも望んでいます。Cypher に 443 件すべての結果を取得させたくありません。
これは現在、LIMIT
句を使用して可能ですか? それとも、LIMIT
443 件すべての結果が見つかるのを待ってから、最初の 5 件だけを返すのでしょうか?
EDIT :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)