2013-05-05 3 views
0

neo4j 관련 프로젝트를 진행하고 있으며 neo4j의 "색인"을 이해하지 못합니다. 관계형 데이터베이스에서는 영구 디스크에 테이블과 인덱스가 있습니다.neo4j 색인을 저장하고 검색하는 방법

neo4j의 경우 노드, 관계 (에지) 및 인덱스가 동일하다고 가정합니다. 나는 이것에 관해 틀릴지도 모른다. 이 예에서

, https://github.com/mrhooray/neo4j-sample/blob/master/src/EmbeddedNeo4jWithIndexing.java

public class EmbeddedNeo4jWithIndexing { 
    private static final String DB_PATH = "/home/mrhooray/Documents/neo4j_db/"; 
    private static final String USERNAME_KEY = "username"; 
    private static GraphDatabaseService graphDb; 
    private static Index<Node> nodeIndex; 
    //... 

    public static void main(String[] args) { 
      //... 
      // index is created as following 
      nodeIndex = graphDb.index().forNodes("nodes"); 
    } 

    // and used to insert data 
    private static Node createAndIndexUser(final String username) { 
     Node node = graphDb.createNode(); 
     node.setProperty(USERNAME_KEY, username); 
     nodeIndex.add(node, USERNAME_KEY, username); 
     return node; 
    } 
} 

EmbeddedNeo4jWithIndexing 그래프 데이터베이스 추상화이다. 그러나 그래프 데이터베이스를 만들고 채운 다음 프로그램을 종료하면 어떻게됩니까? 그런 다음 나중에 동일한 인덱스를 사용하여 동일한 데이터베이스에 액세스하려고합니다. 그러면 EmbeddedNeo4jWithIndexing의 다른 객체를 만들 수 있습니까? 어떻게하면 원래 인덱스를 다시 얻을 수 있습니까?

전화

nodeIndex = graphDb.index().forNodes("nodes"); 

다시? 그런 식으로 작동하지 않는 것 같습니다.

고맙습니다.

답변

3

코드가 올바르게 표시됩니다. index().forNodes("nodes");은 기본적으로 생성 또는 가져 오기 작업이며 인덱스가 존재하지 않으면 인덱스를 생성합니다. 그렇지 않으면 해당 인덱스 이름에 해당하는 인덱스 객체를 반환합니다.

코드에서 트랜잭션을 사용하고 있는지 확인하십시오. 그렇지 않은 경우 실제로 정보를 유지하지 않으므로 트랜잭션을 사용하십시오. 그렇지 않으면 다음 번에 조회를 수행하기 위해 nodeIndex.get(USERNAME_KEY, username)을 수행하면 인덱스에 매핑 된 모든 노드가 반환됩니다.

관련 문제