Il y a plusieurs façons de faire cela avec Gremlin. Supposons que ce graphique (avec des questions de Gremlin il est toujours utile d'inclure un petit échantillon de graphique dans la question elle-même comme celui-ci):
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('topic').property('text','topic').as('t').
......1> addV('question').property('text','question 1').as('q1').
......2> addV('question').property('text','question 2').as('q2').
......3> addV('comment').property('text','comment 1').as('c1').
......4> addV('comment').property('text','comment 2').as('c2').
......5> addV('answer').property('text','answer 1').as('a1').
......6> addV('answer').property('text','answer 2').as('a2').
......7> addE('threadOf').from('t').to('q1').
......8> addE('threadOf').from('t').to('q2').
......9> addE('threadOf').from('q1').to('c1').
.....10> addE('threadOf').from('q1').to('c2').
.....11> addE('threadOf').from('q1').to('a1').
.....12> addE('threadOf').from('q2').to('a2').iterate()
Le graphique ci-dessus est un arbre de sorte qu'il pourrait être préférable de le retourner comme l'un. Pour ce faire, nous pouvons utiliser tree step. Le sujet est à id sommet « 0 » si nous voulons tous la hiérarchie « threadOf » nous pourrions faire:
gremlin> g.V(0L).out('threadOf').out('threadOf').tree().by('text')
==>[topic:[question 1:[comment 2:[],comment 1:[],answer 1:[]],question 2:[answer 2:[]]]]
Cela fonctionne, mais il suppose que nous connaissons la profondeur de l'arbre de « threadOf » bords (nous pas out()
deux fois de sommet « 0 » Si nous ne savons pas la profondeur que nous pouvons faire.
gremlin> g.V(0L).repeat(out('threadOf')).emit().tree().by('text')
==>[topic:[question 1:[comment 2:[],comment 1:[],answer 1:[]],question 2:[answer 2:[]]]]
Merci pour la réponse très détaillée .. la première solution fonctionne en partie lorsque j'utilise 'in' au lieu de Comme vous l'avez dit, je ne connais pas la profondeur de l'arbre, donc j'ai besoin d'utiliser la seconde solution, mais quand j'utilise 'in' pour ça, j'obtiens une erreur inattendue de jeton –
' in' est un mot réservé dans groovy donc tu nie d le préfixer avec le nom de la classe pour cette importation statique de l'étape 'in()'. en d'autres termes, 'g.V (0L) .repeat (__. in ('threadOf')). emit(). tree(). par ('text')' –
Incroyable !! Merci beaucoup –