0
に関連して、特定のラベルを持つノードを探す:ソースノード のNeo4j - パフォーマンス:私は、次の要件を持っているソースノード
- が一定の範囲内のすべてのノード(例えば4つのホップを探します)
- と宛先ノードiは2つのホップのノードを見つけた場合、特別なラベル「X」
- は、最短経路長(例えば、先
- リターンパス内のノードのラベルの種類を制限しています、見つけられないまた、3つのまたは4ホップ)
- 戻り、私は、クエリを作成するために管理が、パフォーマンスはそれほどうまくない
MATCH path = allShortestPaths((source)-[*..4]-(destination))
WHERE source.objectID IN ['001614914']
AND source:Y
AND destination:X
AND ALL(x IN nodes(path)[1..] WHERE any(l in labels(x) WHERE l in ['A', 'B', 'C']))
WITH path
LIMIT 1000
WITH COLLECT(path) AS paths, MIN(length(path)) AS minLength
WITH FILTER(p IN paths WHERE length(p)= minLength) AS pathList
LIMIT 25
UNWIND pathList as path
WITH [n in nodes(path)] as nodes
return nodes
私はない最短経路の機能を使用するようにクエリを変更した場合と、これがうまく機能します送信パスのソースは持っていない多くの
MATCH path = ((source)-[*..4]-(destination))
WHERE source.objectID IN ['001614914']
AND source:Y
AND destination:X
AND ALL(x IN nodes(path)[1..] WHERE any(l in labels(x) WHERE l in ['A', 'B', 'C']))
WITH path
LIMIT 1000
WITH COLLECT(path) AS paths, MIN(length(path)) AS minLength
WITH FILTER(p IN paths WHERE length(p)= minLength) AS pathList
LIMIT 25
UNWIND pathList as path
WITH [n in nodes(path)] as nodes
return nodes
しかし、私は多くの子供たちと一緒にソースノードを持っている場合、これはまた、悪い性能を持っています...
私はすべての目的地を簡単に検索し、各発見された目的地しかし、私はよく分からない。
MATCH (source)-[*..4]-(destination)
WHERE source.objectID IN ['001614914']
AND source:Y
AND destination:X
WITH destination
LIMIT 100
call apoc (shortest path ...)
...
さらに良い方法がありますか?
私は制限の上司を説得してみてください^^ – mabr
ソリューションのこの種は非常に容易になりますAPOCに彼らの方法のいくつかの変更がありますが、のような開始ノードにラベルフィルタを適用するかどうかを指定するオプション(ラベルフィルタに 'Y'を指定する必要はない)と複数のフィルタ操作を同時に使用できるようにするオプションパスのエンドノードのラベル、およびホワイトリスト)。リミット操作も進行中です。新しいリリースがいつ起こるのかは分かりませんが、今後2週間程度で起こる可能性があります。 – InverseFalcon