2017-03-29 16 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; 
} 

ので、このエンティティを検討してください。実際に名前= 'something'のノードから開始するCypherクエリを書くにはどうすればよいですか?インデックス名は何ですか?または、Spring Data Neo4j 4.2.0.RELEASEは、MATCH (event:Event {name = 'somehting'} ...と書いたときにそれ自体を把握していますか?ここで

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

    Event findOne(String eventName); 

} 

レポジトリクラスとあなたは私がリポジトリを管理するエンティティのIDの種類としてStringを使用しています表示される場合がありますので、私は春がEvent findOne(String eventName);

のクエリを生成するには、イベントクラスの nameプロパティを使用して仮定として

答えて

3

spring-data-jpaのspring-data-mongodbまたは@Indexに精通している場合、@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注釈betwen違いをexmplainすることはできますか?

私はあなたがSpring Data Neo4jのドキュメントをチェックしたと仮定します。しかし、私が@GraphIdと@Indexについて追加したいのは、@GraphIdはデータベース全体で一意ですが、@Indexはあなたの決定に応じて同じかユニークにすることができます。

名前= 'something'のノードから実際に開始するCypherクエリを作成するにはどうすればよいですか?インデックス名は何ですか? ?イベント{名=「somehting」} ...

私はあなたが正しい方法でサイファークエリを記述すると信じて:書き込みだけMATCH(イベントの際やSpringデータのNeo4j 4.2.0.RELEASEは、それ自体を把握ありません。インデックス(グラフidを含む)は、データベースによって管理され、最新の状態に保たれており、検索の時間を短縮できるB-TreeやMapなどの特定のデータ構造の形式で格納されています。あなたのneo4j dbをインデックス用に取り出します.db(Where does Neo4j store the data?)によって管理されているファイルに格納されています。

Cypherがインデックスの名前をどのように知っているかについては、インデックスはdbによって維持され、Cypherクエリもdbによってデコードされるため、dbはCypherクエリに従ってインデックスにアクセスできます。これは私のDBシステムの理解に基づく私の推測です。

関連する問題