天天看點

neo4j 基本概念和Cypher語句總結

下面是一個介紹基本概念的例子,參考連結Graph database concepts:

(1) Nodes(節點)

圖譜的基本機關主要是節點和關系,他們都可以包含屬性,一個節點就是一行資料,一個關系也是一行資料,裡面的屬性就是資料庫裡面的row裡面的字段。

除了屬性之外,關系和節點還可以有零到多個标簽,标簽也可以認為是一個特殊分組方式。

(2) Relationships(關系)

關系的功能是組織和連接配接節點,一個關系連接配接2個節點,一個開始節點和一個結束節點。當所有的點被連接配接起來,就形成了一張圖譜,通過關系可以組織節點形成任意的結構,比如list,tree,map,tuple,或者更複雜的結構。關系擁有方向進和出,代表一種指向。

(3) Properties(屬性)

屬性非常類似資料庫裡面的字段,隻有節點和關系可以擁有0到多個屬性,屬性類型基本和java的資料類型一緻,分為 數值,字元串,布爾,以及其他的一些類型,字段名必須是字元串。

(4) Labels(标簽)

标簽通過形容一種角色或者給節點加上一種類型,一個節點可以有多個類型,通過類型區分一類節點,這樣在查詢時候可以更加友善和高效,除此之外标簽在給屬性建立索引或者限制時候也會用到。label名稱必須是非空的unicode字元串,另外lables最大标記容量是int的最大值,近似21億。

(5) Traversal(周遊)

查詢時候通常是周遊圖譜然後找到路徑,在周遊時通常會有一個開始節點,然後根據cpyher提供的查詢語句,周遊相關路徑上的節點和關系,進而得到最終的結果。

(6) Paths(路徑)

路徑是一個或多個節點通過關系連接配接起來的産物,例如得到圖譜查詢或者周遊的結果。

(7) Schema(模式,類似存儲資料的結構)

neo4j是一個無模式或者less模式的圖譜資料庫,像mongodb,solr,lucene或者es一樣,你可以使用它不需要定義任何schema,

Indexes(索引)

周遊圖通過需要大量的随機讀寫,如果沒有索引,則可能意味着每次都是全圖掃描,這樣效率非常低下,為了獲得更好的性能,我們可以在字段屬性上建構索引,這樣任何查詢操作都會使用索引,進而大幅度提升seek性能,

建構索引是一個異步請求,并不會立刻生效,會再背景建立直至成功後,才能最終生效。如果建立失敗,可以重建索引,先删除索引,在建立即可,然後從log裡面找出建立失敗的原因然後分析。

Constraints(限制)

限制可以定義在某個字段上,限制字段值唯一,建立限制會自動建立索引。

常用的Cypher語句:

  1. 删除節點及關系

    MATCH (n)-[r]-()

    DELETE n,r

  2. 單純删除是以節點,注意:如果存在關系的話,先先删關系,才能删除節點:

    match (n)

    delete n

  3. 在使用load csv方式批量增加節點時,會考慮到以下問題:如果節點存在,更新或者增加節點屬性;如果節點不存在,建立節點,并設定屬性:

    MERGE (n:user { id: ‘1’ })

    ON CREATE SET n.name= ‘quan’

    ON MATCH SET n.name= ‘quan’

  4. 如何根據一個節點傳回關于這個節點的所有資訊

    MATCH (user:User) WHERE user.id = 460

    CALL apoc.path.subgraphAll(user, {maxLevel:4}) YIELD nodes, relationships

    RETURN nodes, relationships;

原文位址:https://blog.csdn.net/zfqbd/article/details/78857643