2017-02-14 2 views

답변

0

안녕, 난 당신의 설명에서 상상할 수있는 두 가지 시나리오가 있습니다 당신이 달성하고자하는 것을 확실하지 오전 :

첫째, 최단 경로 여기서 사용 사례 당신이 시작을 알 수있다

가 꼭지점과 대상 꼭지점 사이에 가장 짧은 (또는 가장 저렴한) 경로를 찾고 싶습니다. SHORTEST_PATH (https://docs.arangodb.com/3.1/AQL/Graphs/ShortestPath.html#shortest-path-in-aql) 기능 내장이 같은 옵션에서의 거리 속성을 정의하여 서비스를 제공 할 수 있습니다

FOR v IN OUTBOUND @start TO @end @@edgeCollections OPTIONS {weightAttribute: "value", defaultWeight: 1} 
    RETURN v 

이 값의 가장 낮은 일부가 마지막에 당신이 처음부터 경로에있는 모든 정점을 줄 것이다 속성. 당신이 "가장 높은 값을"필요하면 값을 복사 할 수와 가장 적은 가장자리가 총 values

두 번째로 가장 높은 합 갖는 경로를 찾기 위해, 다른 필드에 1/value 다시 저장 : 가장자리

을의 정렬을

유스 케이스는 시작점 만 갖고 있으며 연결된 꼭지점을 가장자리의 값으로 정렬하고자합니다. 거기에서 간단하게 traversal 문을 간단한 정렬과 결합 할 수 있습니다. (https://docs.arangodb.com/3.1/AQL/Graphs/Traversals.html#graph-traversals-in-aql)

FOR v, e IN OUTBOUND @start @@edgeCollection 
    SORT e.value DESC 
    LIMIT 1 /* Only pick the highest one */ 
    REUTRN {v: v, e: e} 

번째 사용 케이스 : 만 유스 케이스 2의 AQL은 A- 공지되어야하는 임의의 깊이로 묶여 수

최대 값을 이용하여 여러 가지 깊이를 반복하기 선험적. 그래서 당신은 가장 높은 값을 가진 가장자리를 사용하여 3 단계를 반복하고 싶은 말 :

FOR v1, e1 IN OUTBOUND @start @@edgeCollection 
    SORT e1.value DESC 
    LIMIT 1 /* Only pick the highest one */ 
    /* Depth 1 done. now depth 2*/ 
    FOR v2, e2 IN OUTBOUND v1 @@edgeCollection 
    SORT e2.value DESC 
    LIMIT 1 /* Only pick the highest one */ 
    FOR v3, e3 IN OUTBOUND v2 @@edgeCollection 
     SORT e3.value DESC 
     LIMIT 1 /* Only pick the highest one */ 
     RETURN [v1,v2,v3] 

넷째 사용의 경우 :

깊이는 현재 순수한 AQL이 경우, A-선험적으로 알려져 있지 않다 릴리스 버전 (3.1)은 이것을 공식화 할 수 없습니다. 좀 더 유연하지만 자바 스크립트에서만 구현 될 수있는 JavaScript에서 트래버스 모듈 (https://docs.arangodb.com/3.1/Manual/Graphs/Traversals/UsingTraversalObjects.html#getting-started)을 사용하는 Foxx 서비스 (https://docs.arangodb.com/3.1/Manual/Foxx/#foxx)를 사용하는 것이 더 쉬울 것입니다.

+0

재생 해 주셔서 감사합니다.하지만 유감스럽게도 귀하의 솔루션은 제 사례에 적합하지 않으므로 명확히하겠습니다. – DegHueg

+0

두 번째 시나리오에서 작성한 시나리오에는 검색하는 동안 모두 표시 될 전체 가장자리 전체에 대한 제한이 있습니다. 나는 각 레벨에서 가장 높은 valye edge를 얻고 싶다. 따라서 정렬 및 제한은 각 레벨에서 실행되어야하며 각 다음 레벨의 가장자리는 이전 값의 가장 높은 값을 가진 꼭지점에서 선택되어야합니다. F.e. 그래프에서 : A -> B, C -> D, C -> E, 여기서 A -> B는 A -> CI보다 높은 값을 가짐 -> B -> D – DegHueg

+0

ArangoDB에서 Foxx 마이크로 서비스를 살펴보면 여러 개의 단일 깊이 쿼리를 만들 수 있으므로 항상 가장 높은 '값'을 가진 에지를 따라갈 수 있기 때문에 거기에서 할 수 있습니다. 그리고 그것은 매우 빠릅니다 :) 원을 형성하는 모서리에서 반복을 멈추고 싶다면 방문한 모든 정점의 배열을 유지하고 중복을 얻으면 반복을 중지하고 결과를 반환하십시오. –