2015-10-16 4 views
2

У меня есть коллекции документов DC1 и DC2 и края коллекции ec1 и EC2. Я использую DC1 и EC1 для создания графа g1 и DC2 и EC2 для графа g2.Можно показать результат поиска в графе просмотра

Я выполнить некоторые поисковый запрос и получить результирующий набор, который содержит документы d1 из коллекции DC1 и d2 из коллекции DC2.

И я хочу, чтобы представить результат поиска, установленный в средстве просмотра графика, как 2 графиков, чтобы иметь возможность графический exlpore возможных отношений между d1 и другими документами в коллекции DC1 и поэтому для d2 и документы из DC2 ,

Могу ли я сделать это в текущей версии ArangoDB? Знаете ли вы о каких-либо существующих дополнительных приложениях (сервисах, приложениях foxx)?

Теперь, как подвоха я создал 3-й сборник документов DC, содержащих документы из обеих коллекций DC1 и DC2 и переписывался коллекционных край EC, содержащие ребра из обеих коллекций ec1 и ec2, добавить новый узел результат поискаDC и ссылки на него EC Найдено dc1 и DC2, а затем, как график сборки на основе DC и EC начиная с вершиной результата поиска. Это позволило мне выразить любые отношения между найденными результатами и документом из соответствующих исходных коллекций.

Я думаю о создании моего собственного приложения foxx для него (возможно, с временной коллекцией или чем-то еще), если такого еще не существует.

+1

Текущая версия программы просмотра графиков может отображать только один график. – dothebart

+0

@dothebart, у вас есть какие-то планы по внедрению мультиграфического просмотра? Если да, то когда? В противном случае мы попытаемся реализовать его сами. Кроме того, мой основной вопрос - это результат поиска, показывающий как график. В настоящее время я пытаюсь создать заглушку с мультисетейным графом. – zubactik

+0

Нет, мы в настоящее время не собираемся добавлять второй график. Обычно браузеры, как правило, довольно заняты первым: -) Но - источник там, поэтому вы можете помочь себе. Правильно ли я понимаю, что ваш usecase похож на [примерный пример графа маршрутизации города] (https://docs.arangodb.com/Graphs/index.html#the_city_graph), который используется [в документации по функциям Graph] (https: // docs .arangodb.com/GeneralGraphs/functions.html)? – dothebart

ответ

3

В настоящее время невозможно показать результат обхода графика в средстве просмотра графиков.

Вы можете скопировать результаты обхода во временный график, который вы можете отобразить. Мы сделаем это, используя City graph

В качестве примера мы начинаем с Берлина и хотим видеть города, которые не являются столицами.Оригинальный AQL Traversal с этим фильтром будет:

FOR v, e IN 1..1 OUTBOUND 'germanCity/Berlin' GRAPH 'routeplanner' 
    FILTER v.isCapital == false 
    RETURN {City: v, Highway: e} 

Теперь мы создаем временную диаграмму:

db._createEdgeCollection('temporaryEdgeCollection', {volatile: true}) 
db._create('temporaryVertexCollection', {volatile: true}) 
db._graphs.save({ 
    "_key": "tempgraph", 
    "orphanCollections" : [ ], 
    "edgeDefinitions" : [ 
    { 
    "collection": "temporaryEdgeCollection", 
    "from": ["temporaryVertexCollection"], 
    "to": ["temporaryVertexCollection"] 
    } 
    ] 
}) 

Теперь мы редактируем выше запрос на самом деле скопировать график во временные коллекции, которые мы создали выше. Задача состоит в том, что нам действительно нужен также startnode, так как мы хотим отобразить его.

Мы не можем сделать несколько INSERT заявления одних и те же коллекции, так что нам нужно так перегруппировать вершины в список, который также содержит startvertex:

db._query(` 
LET startVertex = DOCUMENT('germanCity/Berlin') 
LET traversalResult = (
    FOR v, e IN 1..1 OUTBOUND startVertex GRAPH 'routeplanner' 
    FILTER v.isCapital == false 
    LET newEdge = MERGE(e, { 
     _from: CONCAT(@tv, '/', SPLIT(e._from, '/')[1]), 
     _to: CONCAT(@tv, '/', SPLIT(e._to, '/')[1]) 
    }) 
    LET newV = UNSET(v, '_id') 
    RETURN {v: newV, e: newEdge} 
) 
LET x=(
    FOR vertex in PUSH(traversalResult[*].v, UNSET(startVertex, '_id')) 
    INSERT vertex INTO temporaryVertexCollection) 
LET y=(
    FOR edge in traversalResult[*].e 
    INSERT edge INTO temporaryEdgeCollection) 
RETURN 1 
`, 
{tv : 'temporaryVertexCollection'}) 

Теперь вы можете actualy нажмите на tempgraph в webinterface , визуализировать фактический результат.

Обратите внимание, что мы использовали неустойчивые коллекции, поэтому мы не тратим на это дисковое пространство.

Смежные вопросы