2016-08-08 4 views
3

Gremlin 언어 (Groovy 하위)에서 나는 ;, &&의 동작과 사용법에 대해 조금 혼란스러워합니다. GremlinClient REPL에서 예를 들어 Gremlin의 시퀀스 문에 대한 구문은 무엇입니까?

, 나는 한 번에 몇 개의 노드를 추가하고자 할 수도 있습니다 (여기 타이탄 1.0을 실행) :

gremlin> graph = TitanFactory.open("../conf/gremlin-server/titan-cassandra-server.properties") 
==>standardtitangraph[cassandra:[localhost]] 
gremlin> g = graph.traversal(standard()) 
==>graphtraversalsource[standardtitangraph[cassandra:[localhost]], standard] 
gremlin> g.V().count() 
==>0 
gremlin> g.addV(label, 'Subject', 'ident', '1') ; g.addV(label, 'Subject', 'ident', '2') 
==>v[4304] 
gremlin> g.V().count() 
==>1 

확인을, 그래서 ; 작동하지 않았다. &&은 어떨까요? 그것은 내가 원하는 의미를 가지고 있지는 않지만 그것을 통해 작업 할 수 있습니다. :

gremlin> g.V().count() 
==>0 
gremlin> g.addV(label, 'Subject', 'ident', '1') && g.addV(label, 'Subject', 'ident', '2') 
==>true 
gremlin> g.V().count() 
==>2 

음 ... 그건 괜찮습니다. 이제는 명령 시퀀스의 일부로 변수를 바인딩 할 수 있어야합니다. 이상하게도 세미콜론은 다음에서 작동합니다.

gremlin> g.V().count() 
==>0 
gremlin> g.E().count() 
==>0 
gremlin> g.addV(label, 'Subject', 'ident', '1') && g.addV(label, 'Subject', 'ident', '2') 
==>true 
gremlin> node3 = graph.addVertex(label, 'Subject', 'ident', '3') ; g.V().has('ident', '1').next().addEdge('dc:isPartOf', node3) ; node3.addEdge('dc:isPartOf', g.V().has('ident','2').next()) 
==>e[35z-6d4-2l91-9n4][8248-dc:isPartOf->12496] 
gremlin> g.V().count() 
==>3 
gremlin> g.E().count() 
==>2 

이제 트릭을 만듭니다. 어떻게이 두 작업을 한 줄로 수행 할 수 있습니까 (하나의 Websocket 요청, 실제로)? 위의 node3 = ... 행을 ;을 통해 복사하고 적절한 기능을 얻을 수도 없습니다.

답변

4

Gremlin language variants에 대해 특별히 언급하지 않는 한 Gremlin은 순수 Groovy입니다. Gremlin은 DSL이며 언어 자체가 아니기 때문입니다. 기술적으로 유효한 그루비는 유효한 Gremlin입니다.

제공된 예제는 .iterate() (.next()은 하나의 요소 만 추가하기 때문에 작동 함)을 통해 순회를 반복해야한다고 생각합니다.

g.addV(label, 'Subject', 'ident', '1').iterate() ; g.addV(label, 'Subject', 'ident', '2') 

는 그렘린 콘솔은 자동으로 단지 그 두 번째 문에 그렇게 명시 적 .iterate()이 필요하지 않습니다 마지막 순회를 반복 할. 이것은 정확히 다음과 같습니다.

g.addV(label, 'Subject', 'ident', '1').iterate() ; g.addV(label, 'Subject', 'ident', '2').iterate() 

WebSocket을 통해 여러 작업을 실행하려면 여러 줄의 스크립트 만 보낼 수 있습니다. 다음은 작동합니다 : TinkerPop의 최신 버전 (I은 3.1 + 리콜) 것을

node3 = graph.addVertex(label, 'Subject', 'ident', '3') 
g.V().has('ident', '1').next().addEdge('dc:isPartOf', node3) 
node3.addEdge('dc:isPartOf', g.V().has('ident','2').next()) 

주, 당신은 체인 .addV() 단계와 같은 탐색 내에서 여러 정점을 추가 할 수 있습니다.

g.addV(label, 'Subject', 'ident', '1').addV(label, 'Subject', 'ident', '2') 

최신 안정 버전 (v1.0.0)은 TinkerPop v3.0.1을 사용하기 때문에 Titan에서는 아직 사용할 수 없습니다.

+2

"순회 반복"은 매번 사람들을 잡습니다. 또한 참조 : http://tinkerpop.apache.org/docs/current/tutorials/the-gremlin-console/#result-iteration - Gremlin은 TinkerPop 2.x에서 "그루비"였습니다. 나는 TinkerPop 3.x에 대해 더 이상이 제한을 두지 않을 것입니다. –

+0

정말 고마워요! –