2013-10-17 5 views
1

프레임이있는 그래프로 고유 한 정점이 생성되도록하는 안전한 방법이 있습니까? 다음을 고려하십시오.프레임이있는 고유 정점

Node n = framedGraph.addVertex(1, Node.class); 
Node m = framedGraph.addVertex(1, Node.class); 
System.out.println(n.equals(framedGraph.getVertex(1, Node.class))); 
System.out.println(m.equals(framedGraph.getVertex(1, Node.class))); 

인쇄 true, false.

Neo4j에서 제공하는 get or create unique node 기능 (이 경우 보조 그래프)과 유사한 기능을 찾고 있습니다.

비공식적으로 - 숫자가 아닌 ID를 사용하는 방법이 있습니까?

Node m = framedGraph.addVertex("http://example.org", Node.class); 
System.out.println(n.equals(framedGraph.getVertex("http://example.org", Node.class))); 

인쇄

답변

3

false Neo4j 청사진은 대부분의 그래픽 구현은 ID 파라미터를 무시한다. TinkerGraph를 제외하고, 그들은 일반적으로 자신의 ID를 할당하는 방법없이 자신의 ID를 할당합니다. 자신의 ID를 시뮬레이션하는 데 항상 IdGraph을 사용할 수 있습니다.

청사진은 "생성 또는 생성"개념을 유지하지 않습니다. 직접 구현해야합니다. 또는 코드를 한 그래프에서 다른 그래프로 이식 할 수 없다는 기대와 함께 Neo4j 코드로 접근 할 수 있다고 가정합니다. 그런 식으로 getOrCreate() 메서드를 노출 한 IdGraph과 비슷한 그래프 래퍼 구현을 작성할 수 있습니다. 적어도 그런 식으로, 당신은 여전히 ​​Graph 인터페이스로 작업하게되고, 그러한 논리는 그 안에 캡슐화됩니다. 물론 프레임에서 직접 이러한 기능을 사용할 수는 없습니다.

+0

감사합니다. ID 문제가 해결됩니다. 하지만 프레임 화 된 그래프에 정점을 추가하고 그 정점을 수동으로 생성 된 인덱스 ('index.put ("term", "foo1", n.asVertex());)에 추가하면 예외가 발생합니다 :'com .tinkerpop.blueprints.util.wrappers.id.IdVertex는 com.tinkerpop.blueprints.impls.neo4j.Neo4jElement'에 캐스팅 될 수 없습니다. 그걸 해결할 방법이 있니? – condit

+1

'IdVertex'를 풀어야한다고 생각합니다. 'IdVertex' 인스턴스를 가져 와서 인덱스에 전달하기 전에'getBaseVertex'를 호출하십시오. http://www.tinkerpop.com/docs/javadocs/blueprints/2.4.0/com/tinkerpop/blueprints/util/wrappers/id/IdVertex.html#getBaseVertex() –

+0

예 -'((IdVertex) n.asVertex()). getBaseVertex()'트릭을 수행합니다. 감사합니다. – condit

관련 문제