그래프에서 값이라는 필드가있는 가장자리가 있습니다. 시작 정점을 선택한 후에 항상 가장 높은 값을 갖는 가장자리를 선택하여 경로를 찾고 싶습니다. 불행히도 적절한 쿼리를 작성하는 방법을 알 수 없지만 ArangoDB에서 가능합니까?ArangoDB에서 가장 큰 값을 가진 에지를 따라 경로를 찾습니다.
답변
안녕, 난 당신의 설명에서 상상할 수있는 두 가지 시나리오가 있습니다 당신이 달성하고자하는 것을 확실하지 오전 :
첫째, 최단 경로 여기서 사용 사례 당신이 시작을 알 수있다
가 꼭지점과 대상 꼭지점 사이에 가장 짧은 (또는 가장 저렴한) 경로를 찾고 싶습니다. 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)를 사용하는 것이 더 쉬울 것입니다.
재생 해 주셔서 감사합니다.하지만 유감스럽게도 귀하의 솔루션은 제 사례에 적합하지 않으므로 명확히하겠습니다. – DegHueg
두 번째 시나리오에서 작성한 시나리오에는 검색하는 동안 모두 표시 될 전체 가장자리 전체에 대한 제한이 있습니다. 나는 각 레벨에서 가장 높은 valye edge를 얻고 싶다. 따라서 정렬 및 제한은 각 레벨에서 실행되어야하며 각 다음 레벨의 가장자리는 이전 값의 가장 높은 값을 가진 꼭지점에서 선택되어야합니다. F.e. 그래프에서 : A -> B, C -> D, C -> E, 여기서 A -> B는 A -> CI보다 높은 값을 가짐 -> B -> D – DegHueg
ArangoDB에서 Foxx 마이크로 서비스를 살펴보면 여러 개의 단일 깊이 쿼리를 만들 수 있으므로 항상 가장 높은 '값'을 가진 에지를 따라갈 수 있기 때문에 거기에서 할 수 있습니다. 그리고 그것은 매우 빠릅니다 :) 원을 형성하는 모서리에서 반복을 멈추고 싶다면 방문한 모든 정점의 배열을 유지하고 중복을 얻으면 반복을 중지하고 결과를 반환하십시오. –