다음 쿼리가 있습니다.
g
.V("user-11")
.repeat(bothE().subgraph("subGraph").outV())
.times(2)
.cap("subGraph")
.next()
을 사용하여 실행 gremlin-python
하면 다음과 같은 응답이 나타납니다.
{'@type': 'tinker:graph',
'@value': {'vertices': [v[device-3], v[device-1], v[user-11], v[card-1]],
'edges': [e[68bad734-db2b-bffc-3e17-a0813d2670cc][user-11-uses_device->device-1],
e[14bad735-2b70-860f-705f-4c0b769a7849][user-11-uses_device->device-3],
e[f0bb3b6d-d161-ec60-5e6d-068272297f24][user-11-uses_card->card-1]]}}
쿼리로 얻은 하위 그래프의 Graphson 표현입니다.
나는 싶어 동일한 응답 사용하여 자바 와 gremlin-driver
하지만 난 어떻게 그림을 수 없었다.
나의 최선의 시도는 :
ObjectMapper mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).create().createMapper();
Object a = graphTraversalSource
.V(nodeId)
.repeat(bothE().subgraph("subGraph").outV())
.times(2)
.cap("subGraph")
.next();
return mapper.writeValueAsString(a);
그러나 그로 인해 다음과 같은 오류가 발생했습니다.
io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: Encountered unregistered class ID: 65536
AWS Neptune을 사용하고 있지만을 통해 원하는 답변을받을 수 있다는 점을 감안할 때 차이가 있을지 의심됩니다 gremlin-python
.
도움을 주시면 감사하겠습니다! 감사
댓글에서 언급했듯이
Gyro 하나는 오래되었으며 다른 직렬 변환기 중 하나를 지정하지 않은 경우 오류가 발생할 가능성이 있습니다.
다른 serializer 중 하나를 사용하더라도 그래프를 JSON으로 deserialize하려면 특정 TinkerGraph serializer를 사용해야합니다 (예는이 답변의 끝 부분 참조). 그렇지 않으면 그냥 {}
반환됩니다.
그러나 Java Gremlin 클라이언트의 경우 JSON을 전혀 생성 할 필요가 없습니다.
실제 TinkerGraph가 돌아왔다면 메모리 내 하위 그래프에 대해 실제 Gremlin 쿼리를 실행할 수 있습니다. 새 순회 소스를 생성하기 만하면됩니다. 원하는 경우 graph.io
클래스를 사용하여 그래프를 파일에 쓸 수도 있습니다 . TinkerGraph에는 속성과 가장자리 및 정점이 포함됩니다.
다음과 같은 명령문을 사용하여 TinkerGraph 객체에 직접 액세스 할 수도 있습니다.
a.vertices
과 a.edges
구체적인 예를 들어, 다음과 같은 형식의 쿼리가있는 경우
TinkerGraph tg = (TinkerGraph)g.V().bothE().subgraph("sg").cap("sg").next();
그러면 할 수 있습니다
GraphTraversalSource g2 = tg.traversal();
Long cv = g2.V().count().next();
Long ce = g2.E().count().next();
또는 다음 형식의 명령문을 사용하여 TinkerGraph 데이터 구조에 직접 액세스 할 수 있습니다.
Vertex v = tg.vertices[<some-id>]
또는
List properties = tg.vertices[<some-id>].properties()
이것은 실제로 하위 그래프로 작업 할 때 Java 클라이언트에서 더 많은 기능을 사용할 수 있음을 의미합니다.
여전히 하위 그래프의 JSON 버전이 필요하다고 생각되는 경우 IO 참조는 유용한 책갈피입니다. https://tinkerpop.apache.org/docs/3.4.9/dev/io/#_io_reference
편집 됨 :-문서를 많이 읽는 것을 절약하기 위해이 코드는 TinkerGraph를 JSON으로 인쇄합니다.
mapper = GraphSONMapper.build().
addRegistry(TinkerIoRegistryV3d0.instance()).
version(GraphSONVersion.V3_0).create().createMapper();
mapper.writeValueAsString(tg)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다