2014-10-28 1 views
1

나는 3 백만 노드와 약 900 만 개의 관계를 가진 neo4j 데이터베이스를 가지고 있습니다.간단한 질의가 발생했습니다.

START a=node:CONTACTS(number='3742') , b=node:CONTACTS(number='7423') 
MATCH p=a-[r*..5]-b 
WITH p, relationships(p) as rcoll 
RETURN p, REDUCE(totalTime=0, x in rcoll | totalTime + x.time) as totalTime 
ORDER BY totalTime ASC 
LIMIT 5; 

을하지만,이 쿼리가 걸리면 결코 결과를 반환하지 : 나는 다음과 같은 쿼리 (관계의 방향이 중요하지 않은) 두 가지를 갈 수있는, 주어진 두 노드 사이의 최단 경로를 찾기 위해 노력하고있어. 아이디어를 왜 또는 어떻게 디버깅 할 수 있습니까?

덕분에 비교적 큰 데이터 집합의 가중치를 최단 경로에 대한

+1

r 관계를 여러 번 통과 한 적이 있습니까? 이것이 일어나지 못하도록하는 것은 무엇입니까? – Rolf

+0

이것을 방지하려면 어떻게해야합니까? –

답변

1

, 당신은 정말 자바에 graphalgo 패키지를 사용하고, (당신이 Neo4j 서버를 사용하는 경우) 관리되지 않는 확장을 구축 할 필요가있다. Cypher의 reduce는 이러한 종류의 쿼리에 최적화되어 있지 않습니다. 가중 된 최단 경로는 결국 Cypher에서 구문을 갖게됩니다. 가 http://neo4j.com/docs/stable/tutorials-java-embedded-graph-algo.html

당신은 또한 시작과 끝 - 노드를 제공하는 경로 발견 REST-API를 사용할 수
+0

파이썬을 사용하고 있습니다. 조언이 있습니까? 내가 암호 대신 gremlin을 사용하면 개선이있을 것이라고 생각합니까? 감사! –

+0

사용중인 Neo 버전은 무엇입니까? –

+0

2.1.5는 Windows (커뮤니티) 및 Linux에서 모두 발생합니다. –

2

는, 관계의 유형은 통과하고 당신은 비용을 제공 할 수

이것은 당신이 시작할 수 있어야 변수 또는 계산할 함수.

참조 : http://neo4j.com/docs/stable/rest-api-graph-algos.html

예 요청

POST http://localhost:7474/db/data/node/54/path 
{ 
    "to" : "http://localhost:7474/db/data/node/51", 
    "cost_property" : "time", 
    "relationships" : { 
    "type" : "to", 
    "direction" : "out" 
    }, 
    "algorithm" : "dijkstra" 
} 

당신이 당신의 인덱스 조회에 당신이 REST-BATCH-API를 사용하여 {1이 노드-URL을 대체 할 수 있음을 결합하려는 경우 } 및 {2} 각각에 대해 batch-id입니다.

http://neo4j.com/docs/stable/rest-api-batch-ops.html#rest-api-refer-to-items-created-earlier-in-the-same-batch-job

+0

좋은 아이디어 ... 기본적으로 관리되지 않는 확장이 수행하는 것과 동일한 것입니다. (대신이 작업을 수행해야합니다.) –

+0

REST API가 더 멋지게 보이지만 여전히 일부 쿼리에서 멈추는 경우가 있습니다. (매우 긴급하며 도움이 필요하지 않습니다. 감사합니다. –

관련 문제