2017-03-17 2 views

답변

1

allShortestPaths 기능은 두 노드 간의 모든 최단 경로를 열거합니다. 따라서 쿼리에는 objectapiUser 노드의 모든 가능한 쌍이 소요되며 각 쌍 사이의 모든 최단 경로가 열거됩니다. 그러면 어떻게 그 일을 막을 수 있을까요?

먼저

, 당신은 다음과 같이 원래 쿼리를 단순화 할 수 있습니다 :

MATCH p=allShortestPaths((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

둘째, 당신은 단지 하나 개의 경로를 필요로하는 경우, 왜 shortestPath 기능을 사용하지?

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
ORDER BY length(p) DESC 
LIMIT 1 

이 가장 효율적인 해결책이 아니다 : 당신이 경로의 길이에 따라 결과를 정렬 할 것, 그래서

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

이 여전히 각 apiUser에 대한 최단 경로를 계산합니다 Neo4j는 각각 apiUser에 대한 최단 경로를 계산합니다. 솔루션이 사용 사례에 적용 가능한지 여부는 데이터베이스의 apiUser 수에 따라 다릅니다.

0

단일 노드에서 일치하는 경우, LIMIT 1 가변 길이 일치 작동합니다 : 속성으로 노드를 찾을 때 당신의 경기에서 레이블이하는 것이 좋습니다

MATCH (object{id:'1489751911095'})-[*]-(p:ApiUser) 
RETURN p limit 1 

및 인덱스 또는 라벨 + 속성에 대한 고유 한 제약 조건이므로 빠른 일치입니다.

해당 유형의 노드가 가까이에 있는지 확실하지 않은 경우 가변 길이 일치에 상한값을 추가 할 수 있습니다.