2017-03-29 1 views
0

누구나 @GraphId@Index 주석의 차이점을 설명 할 수 있습니까? org.neo4j.ogm.annotation? 지금은 문서를 읽은 후 Neo4j 내부 논리에 대한 식별자를 만드는 데 @GraphId이 사용되고 시간 경과에 따라 사용자가 재사용 할 수 있기 때문에 사용자가 의존해서는 안됩니다. 그러나 @Index은 어떨까요? 내가 알고있는 것처럼스프링 데이터 Neo4j @GraphId 및 @Index

, 그래프 기반 데이터베이스의 주요 장점은 우리는 우리가해야 할 일은 그냥 시작에서 그래프를 통과하기 때문에 일이 쉽게되기 시작할에서 노드/관계를 알면 마디. 색인 생성은 그렇게하는 데 도움이됩니다. 그래서 우리는 START n = node:index_name(property_name = value)과 같은 것을 쓸 수 있고, 인덱스 된 노드에서 그래프를 'property_name'속성에 의해 exloring하기 시작할 수 있습니다, 맞습니까? 당신이 String name 속성이 @Index와 주석이 볼 수 있듯이

@ToString 
@NodeEntity(label = "Event") 
@NoArgsConstructor 
public class Event{ 

    public Event(String eventName, LocalDate dateTime){ 
     this.name = eventName; 
     this.date = dateTime; 
    } 

    public Event(Long id, String eventName, LocalDate dateTime){ 
     this(eventName, dateTime); 
     this.id = id; 
    } 

    @Getter 
    @GraphId 
    private Long id; 

    @Getter 
    @Index(unique = true, primary = true) 
    @Property(name = "name") 
    private String name; 

    @Getter 
    @Property(name = "date") 
    @Convert(DateConverter.class) 
    private LocalDate date; 
} 

:

그래서,이 엔티티를 고려하십시오. 실제로 Cypher 쿼리를 작성하여 name = 'something'인 노드에서 실제로 시작할 수 있습니까? 색인 이름은 무엇입니까? 또는 스프링 데이터 Neo4j 4.2.0.RELEASE는 단지 MATCH (event:Event {name = 'somehting'} ...으로 쓸 때 그 자체로 나타납니다? 여기

@Repository 
public interface EventRepository extends Neo4jRepository<Event, String>{ 

    Event findOne(String eventName); 

} 

repositry 클래스와 당신은 내가 저장소가 관리하는 엔티티의 ID의 형식으로 String를 사용하고 볼 수 있습니다, 그래서 봄이 Event findOne(String eventName);

에 대한 쿼리를 생성하는 이벤트 클래스의 name 속성을 사용하여 가정 등

답변

3

@Index는 spring-data-jpa의 spring-data-mongodb 또는 @Index에 익숙한 사용자라면 @Indexed와 유사합니다. 기본적으로이 필드를 매우 빠르게 검색 할 수 있도록 필드를 인덱싱합니다 (다른 것들 중에서도). 저장소 방법에 관한
, 그것은 다음과 같이 이름을 지정해야합니다

Event findByName(String eventName); 
+0

예, 그렇습니다. 이것 좀 봐. 도움이 될 것입니다. http://graphaware.com/neo4j/2015/01/16/neo4j-graph-model-design-labels-versus-indexed-properties.html – pvpkiran

0

사람이 org.neo4j.ogm.annotation에서 @GraphId 및 @index 주석 타협의 차이를 exmplain 수 있습니까?

스프링 데이터 Neo4j의 문서를 확인했다고 가정합니다. 그러나 @GraphId와 @Index에 대해 추가하고 싶은 것은 @GraphId가 전체 db 중에서 고유 한 반면 @Index는 결정에 따라 동일하거나 고유 할 수 있다는 것입니다.

실제로 'name'= 'something'인 노드에서 시작하도록 Cypher 쿼리를 작성하려면 어떻게해야합니까? 색인 이름은 무엇입니까? ? 이벤트 {이름 = 'somehting'} ...

난 당신이 올바른 방법으로 사이퍼 쿼리를 작성 믿는다 쓰기 단지 MATCH (이벤트 때 또는 봄 데이터 Neo4j 4.2.0.RELEASE은 자신을 파악 않습니다. 색인 (그래프 ID 포함)은 데이터베이스에 의해 유지되고 최신 상태로 유지되며 검색 시간을 단축 할 수있는 B-Tree 또는 Map과 같은 특정 데이터 구조의 형태로 저장됩니다. db에 의해 관리되는 파일에 저장됩니다 (Where does Neo4j store the data?).

Cypher가 인덱스 이름을 알고있는 방법은 인덱스가 db에 의해 유지 관리되고 Cypher 쿼리도 db에 의해 디코딩되므로 Cypher 쿼리에 따라 db가 인덱스에 액세스 할 수 있음을 의미합니다. 이것은 DB 시스템에 대한 나의 이해를 바탕으로 한 나의 추측 일뿐입니다.

관련 문제