У нас есть миллионы вершин и десять миллионов ребер, чтобы сформировать ориентированный граф. Кто-нибудь знает, как получить подграф в Титане между двумя заданными вершинами?Учитывая две конкретные вершины, как получить подграф между ними в Титане?
0
A
ответ
2
TinkerPop обеспечивает два способа: subgraphing
- Существует
subgraph
step и - Существует
subgraph
strategy
Используйте subgraph
шаг к "палить" подграф в отдельный экземпляр графа. Вы можете увидеть в следующем примере, как граф «г» является subgraphed в новый Graph
экземпляр «знает» края:
gremlin> subGraph = g.E().hasLabel('knows').subgraph('subGraph').cap('subGraph').next() //(1)
==>tinkergraph[vertices:3 edges:2]
gremlin> sg = subGraph.traversal()
==>graphtraversalsource[tinkergraph[vertices:3 edges:2], standard]
gremlin> sg.E() //(2)
==>e[7][1-knows->2]
==>e[8][1-knows->4]
Вы могли бы использовать Subgraph
стратегии в тех случаях, когда вы хотите, чтобы пройти подмножество графа только:
gremlin> graph = TinkerFactory.createTheCrew()
==>tinkergraph[vertices:6 edges:14]
gremlin> g = graph.traversal().withStrategies(SubgraphStrategy.build().
vertices(or(hasNot('location'),properties('location').count().is(gt(3)))).
edges(hasLabel('develops')).
vertexProperties(or(hasLabel(neq('location')),hasNot('endTime'))).create())
==>graphtraversalsource[tinkergraph[vertices:6 edges:14], standard]
gremlin> g.V().valueMap(true)
==>[id:1,label:person,name:[marko],location:[santa fe]]
==>[id:8,label:person,name:[matthias],location:[seattle]]
==>[id:10,label:software,name:[gremlin]]
==>[id:11,label:software,name:[tinkergraph]]
gremlin> g.E().valueMap(true)
==>[id:13,label:develops,since:2009]
==>[id:14,label:develops,since:2010]
==>[id:21,label:develops,since:2012]
Судя по названию вашего вопроса, это звучит, как вы просто хотите граф из двух вершин с ребрами между ними. По-моему, похоже, вы хотели бы использовать шаг subgraph
. Конечно, это, кажется, даже проще, чем получить этот результат:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).bothE().where(otherV().hasId(2))
==>e[7][1-knows->2]
Имея список ребер образуют подграф в некотором смысле, особенно в случае двух известных вершин.
Спасибо за ваш ответ, Стивен Маллетт! Можно ли перейти на команды Titan 0.5.4? В настоящее время у нас нет плана для обновления до Titan 1.0. – kcchiu
В TinkerPop 2.x и Titan 0.5.x нет встроенных функций подграфа. Вам придется написать свой собственный способ сделать это. Вы можете легко найти края между двумя вершинами: 'gv (1) .bothE.as ('x'). BothV.retain ([gv (3)]). Назад ('x')' скопировано из [gremlindocs .com] (http://gremlindocs.spmallette.documentup.com/#finding-edges-between-vertices) –
Хорошо! Мы попробуем его более подробно. Кстати, знаете ли вы, как получить все циклы в ориентированном графе в Титане? Есть ли встроенная функция или мы должны написать собственный метод? – kcchiu