2017-03-29 3 views
0

Kann jemand den Unterschied zwischen @GraphId und @Index Annotation von org.neo4j.ogm.annotation errechnen? Nach dem Lesen der Dokumente scheint es, dass @GraphId verwendet wird, um eine Kennung für die interne Logik von Neo4j zu erstellen, und Benutzer sollten sich nicht darauf verlassen, da sie im Laufe der Zeit wiederverwendet werden kann. Aber was ist mit @Index?Spring Data Neo4j @GraphId und @Index

Wie ich verstehe, ist der Hauptvorteil von Graphen basierten Datenbanken, dass einmal kennen wir den Knoten/Beziehung, aus den Dingen zu beginnen einfach worden, da alles, was wir tun müssen, nur die Grafik von diesem Ausgangsdurchqueren wird Knoten. Und Indexierung hilft dabei, oder? Also können wir etwas wie START n = node:index_name(property_name = value) schreiben und sofort damit beginnen, das Diagramm aus dem indizierten Knoten mit der Eigenschaft 'property_name' auszulesen, oder?

Also, sollten Sie diese Einheit:

@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; 
} 

Wie Sie die String name Eigenschaft sehen kann, ist mit @Index kommentiert. Wie kann ich Cypher-Abfrage schreiben, um tatsächlich von dem Knoten mit name = 'etwas' zu starten? Wie lautet der Indexname? Oder macht Spring Data Neo4j 4.2.0.RELEASE es selbst beim Schreiben nur MATCH (event:Event {name = 'somehting'} ...?

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

    Event findOne(String eventName); 

} 

Hier die repositry Klasse und wie Sie vielleicht sehe ich String als die Art der ID des Unternehmens bin mit dem Repository verwaltet, so nehme ich an Frühling name Eigenschaft der Event-Klasse verwendet eine Abfrage für Event findOne(String eventName);

zu erzeugen

Antwort

3

@Index ist ähnlich zu @Indexed, wenn Sie mit Feder-Data-Mongodb oder @Index in Spring-Data-Jpa vertraut sind. Im Grunde indiziert es das Feld (unter anderem), wodurch es ziemlich schnell nach diesem Feld sucht.
In Bezug auf Ihre Repository-Methode, es sollte wie folgt

Event findByName(String eventName); 
+0

Ja, tatsächlich. Sieh dir das an. Dies könnte http://grafhaware.com/neo4j/2015/01/16/neo4j-graph-model-design-labels-versus-indexed-properties.html helfen – pvpkiran

0

Kann jemand von org.neo4j.ogm.annotation exmplain den Unterschied betwen @GraphId und @Index Anmerkung benannt werden?

Ich nehme an, dass Sie das Dokument von Spring Data Neo4j überprüft haben. Aber eine Sache, die ich über @GraphId und @Index hinzufügen möchte, ist, dass @GraphId einzigartig unter der ganzen DB ist, während @Index gleich oder einzigartig sein kann, abhängig von Ihrer Entscheidung.

Wie kann ich Cypher Abfrage schreiben, um tatsächlich von dem Knoten mit name = 'etwas' zu starten? Wie lautet der Indexname? Oder ist Spring Data Neo4j 4.2.0.RELEASE kapier selbst wenn Schreib nur MATCH (event: Event-{name = 'somehting'} ...

Ich glaube, Sie die Cypher Abfrage auf eine korrekte Art zu schreiben. Indizes (einschließlich Graph-ID) werden von der Datenbank gepflegt und auf dem neuesten Stand gehalten.Sie werden in einer bestimmten Datenstruktur gespeichert, zum Beispiel B-Tree oder Map, wodurch sich die Suchzeit reduzieren lässt out Ihre neo4j db für die Indizes.Sie werden entweder in Dateien gespeichert von der db (Where does Neo4j store the data?) gespeichert.

Wie Cypher den Namen eines Index kennt, da Indizes von der db und Cypher-Abfragen auch von der db dekodiert werden, würde es sinnvoll sein, dass die Datenbank auf den Index entsprechend der Cypher-Abfrage zugreifen kann. Dies ist nur meine Vermutung basierend auf meinem Verständnis von DB-System.

Verwandte Themen