2016-10-27 8 views
0

У меня есть нормальный узел линия связь графПочему это Arangodb максимальной глубина запроса не является правильной

Для целей получения всех ссылок, я хочу, чтобы получить узел, который связан с глубиной х макс. Но запрос ниже возвратил неверный результат (64 из 81). Но максимальная глубина между ними точно такая же, как 7. Где я ошибся?

FOR v IN 0..14 ANY "Entity/41591987" EntityRelation 
OPTIONS {uniqueVertices: "global"} return v 

Edit 1: Добавление вариант BFS: правда, казалось, чтобы решить эту проблему, но я не понимаю, почему.


Edit 2: Мой полный запрос

//get all the vertices related to this one id 
    FOR v IN 0..9 ANY "EntityProd/58868489" EntityRelationProd 
    OPTIONS {uniqueVertices: "global",bfs:true} 
    //from each of above results, get the incoming and outgoing edges 
    FOR vv, c IN ANY v EntityRelationProd RETURN c 

Дело в том, что я уже получил правильные результаты, чтобы получить все вершины. Почему «uniqueVertices: global» влияет на мою вторую часть? Или мне нужно повторно указать ВАРИАНТЫ?

ответ

1

Я думаю, что проблема OPTIONS {uniqueVertices: "global"}. Это гарантирует, что каждую вершину посещают не более одного раза. Итак, если в вершине разностной длины есть два пути, то только один из них будет пройден, другой исключен. Без bfs: true результат uniqueVertices: 'global' is не детерминированный.

Позвольте мне проиллюстрировать это следующим примером. У нас есть 6 вершин в алфавитном связи:

(A) -> (B) -> (C) -> (D) -> (E) -> (F) 

И чем мы имеем другую вершину X добавить ярлык:

(A) -> (X) -> (D) 

Теперь давайте выполнить Передачу выше с глубиной 1..3 начиная с (A). У нас есть два варианта: либо выбрать B, либо X. Выберем X Затем мы возвращаем X, D, E для этого подграфа. Затем мы возвращаемся к A и выбираем другой вариант. Там у нас есть B, C. Мы делаем неD как он уже был навещал. В этом случае у нас есть: X, D, E, B, C.

Если мы выберем другой вариант на A, результат будет другим. Сначала мы находим B, C, D, что по-прежнему соответствует другому выбору. Но тогда проблема начинается, если мы продолжим поиск в X. Там мы выбираем X и смотрим на D. К сожалению, D был уже возвращен, поэтому мы останавливаемся здесь. Следовательно, результатом является: B, C, D, X и noE. (bfs: true) Все ссылки Таким образом, не может быть более короткого пути к любой вершине, которая столкнется с трудностями, которые мы получаем в приведенном выше примере. Здесь результат детерминирован и четко определен.

Однако вы говорили обо всех links между вашими сущностями. Обратите внимание, что если вы говорите: uniqueVertices: 'global', то самое большее будет ОДИН край, указывающий на любое возвращаемое вами сущ. (Также выбранное на основе порядка обхода). Если вы хотите иметь все грани между вашими объектами, вы, вероятно, захотите пойти без опции uniqueVertex.

+0

Я думаю, что есть пробел в моих знаниях о траверсе графика. Я обновил вопрос, чтобы лучше выразить текущее понимание моего запроса –