乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      史上超全面的Neo4j使用指南

       遠方 2020-04-10

      Create by yster@foxmail.com 2018-7-10

      我的博客:https://blog.csdn.net/yueshutong123

      W3Cschool文檔:https://www./neo4j/neo4j_features_advantages.html

      neo4j-examples:https://github.com/neo4j-examples/

      第一章:介紹

      Neo4j是什么

      Neo4j是一個高性能的,NOSQL圖形數(shù)據(jù)庫,它將結構化數(shù)據(jù)存儲在網(wǎng)絡上而不是表中。它是一個嵌入式的、基于磁盤的、具備完全的事務特性的Java持久化引擎,但是它將結構化數(shù)據(jù)存儲在網(wǎng)絡(從數(shù)學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟數(shù)據(jù)庫的所有特性。程序員工作在一個面向對象的、靈活的網(wǎng)絡結構下而不是嚴格、靜態(tài)的表中——但是他們可以享受到具備完全的事務特性、企業(yè)級的數(shù)據(jù)庫的所有好處。

      Neo4j的特點

      SQL就像簡單的查詢語言Neo4j CQL

      它遵循屬性圖數(shù)據(jù)模型

      它通過使用Apache Lucence支持索引

      它支持UNIQUE約束

      它它包含一個用于執(zhí)行CQL命令的UI:Neo4j數(shù)據(jù)瀏覽器

      它支持完整的ACID(原子性,一致性,隔離性和持久性)規(guī)則

      它采用原生圖形庫與本地GPE(圖形處理引擎)

      它支持查詢的數(shù)據(jù)導出到JSON和XLS格式

      它提供了REST API,可以被任何編程語言(如Java,Spring,Scala等)訪問

      它提供了可以通過任何UI MVC框架(如Node JS)訪問的Java腳本

      它支持兩種Java API:Cypher API和Native Java API來開發(fā)Java應用程序

      Neo4j的優(yōu)點

      它很容易表示連接的數(shù)據(jù)

      檢索/遍歷/導航更多的連接數(shù)據(jù)是非常容易和快速的

      它非常容易地表示半結構化數(shù)據(jù)

      Neo4j CQL查詢語言命令是人性化的可讀格式,非常容易學習

      它使用簡單而強大的數(shù)據(jù)模型

      它不需要復雜的連接來檢索連接的/相關的數(shù)據(jù),因為它很容易檢索它的相鄰節(jié)點或關系細節(jié)沒有連接或索引

      第二章:安裝

      1.環(huán)境

      Centos 7.4

      neo4j-community-3.4.1.tar.gz

      2.下載

      下載地址 https:///download/other-releases/

      下載wget https:///artifact.php?name=neo4j-community-3.4.1-unix.tar.gz

      解壓tar -zxvf neo4j-community-3.4.1.tar.gz

      3.開啟遠程訪問

      一、對于3.0以前的版本

      在安裝目錄的 $NEO4J_HOME/conf/neo4j.conf 文件內,找到下面一行,將注釋#號去掉就可以了 #dbms.connector.https.address=localhost:7473 改為 dbms.connector.https.address=0.0.0.0:7473 這樣,遠程其他電腦可以用本機的IP或者域名后面跟上7474 端口就能打開web界面了 如: https://:7473

      當然,你的操作系統(tǒng)的防火墻也要確保開放了7474端口才行,防火墻怎樣開放請自行針對自己的操作系統(tǒng)查找文檔

      二、對于3.1及以后的版本

      在安裝目錄的 $NEO4J_HOME/conf/neo4j.conf 文件內,找到下面一行,將注釋#號去掉就可以了 dbms.connectors.default_listen_address=0.0.0.0

      4.測試

      在bin目錄下,執(zhí)行命令:./neo4j start啟動,其他命令 { console | start | stop | restart | status } 

      訪問http://IP地址:7474/, 出現(xiàn)下圖即代表安裝成功,頂部的$輸入框用來執(zhí)行下面的CQL語句。

      第三章:CQL

      1.CQL簡介

      CQL代表Cypher查詢語言。 像Oracle數(shù)據(jù)庫具有查詢語言SQL,Neo4j具有CQL作為查詢語言。

      Neo4j CQL -

      它是Neo4j圖形數(shù)據(jù)庫的查詢語言。

      它是一種聲明性模式匹配語言

      它遵循SQL語法。

      它的語法是非常簡單且人性化、可讀的格式。

      如Oracle SQL -

      Neo4j CQL 已命令來執(zhí)行數(shù)據(jù)庫操作。

      Neo4j CQL 支持多個子句像在哪里,順序等,以非常簡單的方式編寫非常復雜的查詢。

      NNeo4j CQL 支持一些功能,如字符串,Aggregation.In 加入他們,它還支持一些關系功能。

      2.Neo4j CQL命令/條款

      常用的Neo4j CQL命令/條款如下:

      S.No.

      CQL命令/條

      用法

      1。

      CREATE 創(chuàng)建

      創(chuàng)建節(jié)點,關系和屬性

      2。

      MATCH 匹配

      檢索有關節(jié)點,關系和屬性數(shù)據(jù)

      3。

      RETURN 返回

      返回查詢結果

      4。

      WHERE 哪里

      提供條件過濾檢索數(shù)據(jù)

      5。

      DELETE 刪除

      刪除節(jié)點和關系

      6。

      REMOVE 移除

      刪除節(jié)點和關系的屬性

      7。

      ORDER BY以…排序

      排序檢索數(shù)據(jù)

      8。

      SET 組

      添加或更新標簽

      3.Neo4j CQL 函數(shù)

      以下是常用的Neo4j CQL函數(shù):

      S.No.

      定制列表功能

      用法

      1。

      String 字符串

      它們用于使用String字面量。

      2。

      Aggregation 聚合

      它們用于對CQL查詢結果執(zhí)行一些聚合操作。

      3。

      Relationship 關系

      他們用于獲取關系的細節(jié),如startnode,endnode等。

      我們將在后面的章節(jié)中詳細討論所有Neo4j CQL命令,子句和函數(shù)語法,用法和示例。

      4.Neo4j CQL數(shù)據(jù)類型

      這些數(shù)據(jù)類型與Java語言類似。 它們用于定義節(jié)點或關系的屬性

      Neo4j CQL支持以下數(shù)據(jù)類型:

      S.No.

      CQL數(shù)據(jù)類型

      用法

      1.

      boolean

      用于表示布爾文字:true,false。

      2.

      byte

      用于表示8位整數(shù)。

      3.

      short

      用于表示16位整數(shù)。

      4.

      int

      用于表示32位整數(shù)。

      5.

      long

      用于表示64位整數(shù)。

      6.

      float

      I用于表示32位浮點數(shù)。

      7.

      double

      用于表示64位浮點數(shù)。

      8.

      char

      用于表示16位字符。

      9.

      String

      用于表示字符串。

      第四章:命令

      1.CREATE創(chuàng)建

      Neo4j CQL創(chuàng)建一個沒有屬性的節(jié)點CREATE (:)

      語法說明

      規(guī)范說法是節(jié)點標簽名稱,其實相當于Mysql數(shù)據(jù)庫中的表名,而是節(jié)點名稱,其實代指創(chuàng)建的此行數(shù)據(jù)。

      示例CREATE (emp:Employee)

      或者CREATE (:Employee)

      Neo4j CQL創(chuàng)建具有屬性的節(jié)點

      Neo4j CQL“CREATE”命令用于創(chuàng)建帶有屬性的節(jié)點。 它創(chuàng)建一個具有一些屬性(鍵值對)的節(jié)點來存儲數(shù)據(jù)。CREATE (    :   {           :      ........       :   } )

      示例CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

      創(chuàng)建多個標簽到節(jié)點

      語法:CREATE (::.....:)

      示例CREATE (m:Movie:Cinema:Film:Picture)

      2.MATCH查詢

      Neo4j CQL MATCH命令用于

      從數(shù)據(jù)庫獲取有關節(jié)點和屬性的數(shù)據(jù)

      從數(shù)據(jù)庫獲取有關節(jié)點,關系和屬性的數(shù)據(jù)

      MATCH命令語法:MATCH  (    :)

      示例MATCH (dept:Dept)

      但是執(zhí)行后會報錯:Neo.ClientError.Statement.SyntaxError:  Query cannot conclude with MATCH  (must be RETURN or an update clause) (line 1, column 1 (offset: 0))

      如果你觀察到錯誤消息,它告訴我們,我們可以使用MATCH命令與RETURN子句或UPDATA子句。

      3.RETURN返回

      Neo4j CQL RETURN子句用于 -

      檢索節(jié)點的某些屬性

      檢索節(jié)點的所有屬性

      檢索節(jié)點和關聯(lián)關系的某些屬性

      檢索節(jié)點和關聯(lián)關系的所有屬性

      RETURN命令語法:RETURN     .,    ........    .

      示例MATCH (e:Employee) RETURN e

      或MATCH (dept: Dept) RETURN dept.deptno,dept.dname,dept.location

      4.關系基礎

      Neo4j圖數(shù)據(jù)庫遵循屬性圖模型來存儲和管理其數(shù)據(jù)。

      根據(jù)屬性圖模型,關系應該是定向的。 否則,Neo4j將拋出一個錯誤消息。

      基于方向性,Neo4j關系被分為兩種主要類型。

      單向關系

      雙向關系

      使用新節(jié)點創(chuàng)建關系

      示例CREATE (e:Employee)-[r:DemoRelation]->(c:Employee)

      這句會創(chuàng)建節(jié)點e,節(jié)點c,以及e -> c的關系r,這里需要注意方向,比如雙向是CREATE (e:Employee)<-[r:DemoRelation]->(c:Employee)

      使用已知節(jié)點創(chuàng)建帶屬性的關系:MATCH (:),(:) CREATE       ()-[:    {}]->() RETURN 

      還是一系列鍵值對

      示例MATCH (cust:Customer),(cc:CreditCard)  CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)  RETURN r

      檢索關系節(jié)點的詳細信息:MATCH  ()-[:]->() RETURN 

      示例MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc)  RETURN cust,cc

      5.WHERE子句

      像SQL一樣,Neo4j CQL在CQL MATCH命令中提供了WHERE子句來過濾MATCH查詢的結果。

      簡單WHERE子句語法WHERE   

      語法說明:

      S.No.

      語法元素

      描述

      1

      WHERE

      它是一個Neo4j CQL關鍵字。

      2

      <屬性名稱>

      它是節(jié)點或關系的屬性名稱。

      3

      <比較運算符>

      它是Neo4j CQL比較運算符之一。

      4

      <值>

      它是一個字面值,如數(shù)字文字,字符串文字等。

      Neo4j CQL中的比較運算符

      Neo4j 支持以下的比較運算符,在 Neo4j CQL WHERE 子句中使用來支持條件

      S.No.

      布爾運算符

      描述

      1.

      =

      它是Neo4j CQL“等于”運算符。

      2.

      <>

      它是一個Neo4j CQL“不等于”運算符。

      3.

      <

      它是一個Neo4j CQL“小于”運算符。

      4.

      >

      它是一個Neo4j CQL“大于”運算符。

      5.

      <=

      它是一個Neo4j CQL“小于或等于”運算符。

      6.

      =

      它是一個Neo4j CQL“大于或等于”運算符。

      我們可以使用布爾運算符在同一命令上放置多個條件。

      Neo4j CQL中的布爾運算符

      Neo4j支持以下布爾運算符在Neo4j CQL WHERE子句中使用以支持多個條件。

      S.No.

      布爾運算符

      描述

      1

      AND

      它是一個支持AND操作的Neo4j CQL關鍵字。

      2

      OR

      它是一個Neo4j CQL關鍵字來支持OR操作。

      3

      NOT

      它是一個Neo4j CQL關鍵字支持NOT操作。

      4

      XOR

      它是一個支持XOR操作的Neo4j CQL關鍵字。

      示例MATCH (emp:Employee)  WHERE emp.name = 'Abc' OR emp.name = 'Xyz' RETURN emp

      利用WHERE創(chuàng)建指定關系節(jié)點:MATCH (cust:Customer),(cc:CreditCard)  WHERE cust.id = "1001" AND cc.id= "5001"  CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)  RETURN r

      有必要補充一下,可以不使用WHERE達到WHERE的一些效果,比如MATCH p=(m:Bot{id:123})<-[:BotRelation]->(:Bot)  RETURN p

      6.DELETE刪除

      Neo4j使用CQL DELETE子句

      刪除節(jié)點。

      刪除節(jié)點及相關節(jié)點和關系。

      DELETE節(jié)點子句語法DELETE 

      示例MATCH (e: Employee) DELETE e

      DELETE節(jié)點和關系子句語法DELETE ,,

      示例MATCH (cc: CreditCard)-[rel]-(c:Customer)  DELETE cc,c,rel

      7.REMOVE刪除

      有時基于我們的客戶端要求,我們需要向現(xiàn)有節(jié)點或關系添加或刪除屬性。

      我們使用Neo4j CQL SET子句向現(xiàn)有節(jié)點或關系添加新屬性。

      我們使用Neo4j CQL REMOVE子句來刪除節(jié)點或關系的現(xiàn)有屬性。

      Neo4j CQL REMOVE命令用于

      刪除節(jié)點或關系的標簽

      刪除節(jié)點或關系的屬性

      Neo4j CQL DELETE和REMOVE命令之間的主要區(qū)別 -

      DELETE操作用于刪除節(jié)點和關聯(lián)關系。

      REMOVE操作用于刪除標簽和屬性。

      Neo4j CQL DELETE和REMOVE命令之間的相似性 -

      這兩個命令不應單獨使用。

      兩個命令都應該與MATCH命令一起使用。

      1.REMOVE屬性子句語法REMOVE .,.

      語法說明:

      S.No.

      語法元素

      描述

      1。

      它是節(jié)點的名稱。

      2。

      它是節(jié)點的屬性名稱。

      示例

      這里我們可以觀察到DebitCard節(jié)點包含6個屬性。

      在數(shù)據(jù)瀏覽器上鍵入以下命令刪除cvv屬性MATCH (dc:DebitCard)  REMOVE dc.cvv RETURN dc

      2.REMOVE一個Label子句語法:REMOVE 

      S.No.

      語法元素

      描述

      1.

      REMOVE

      它是一個Neo4j CQL關鍵字。

      2.

      它是一個標簽列表,用于永久性地從節(jié)點或關系中刪除它。

      語法:,  .... :

      示例

      1.我們創(chuàng)建一個含有兩個標簽的節(jié)點:CREATE (m:Movie:Pic)

      2.查詢該節(jié)點MATCH (n:Movie) RETURN n

      3.刪除標簽MATCH (m:Movie)  REMOVE m:Pic

      4.再次查詢

      8.SET子句

      有時,根據(jù)我們的客戶端要求,我們需要向現(xiàn)有節(jié)點或關系添加新屬性。

      要做到這一點,Neo4j CQL提供了一個SET子句。

      Neo4j CQL已提供SET子句來執(zhí)行以下操作。

      向現(xiàn)有節(jié)點或關系添加新屬性

      添加或更新屬性值

      SET子句語法SET  .,....

      語法說明:

      S.No.

      語法元素

      描述

      1

      <節(jié)點標簽名稱>

      這是一個節(jié)點的標簽名稱。

      2

      <屬性名稱>

      它是一個節(jié)點的屬性名。

      示例MATCH (dc:DebitCard) SET dc.atm_pin = 3456 RETURN dc

      9.ORDER BY排序

      Neo4j CQL ORDER BY子句

      Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,對MATCH查詢返回的結果進行排序。

      我們可以按升序或降序對行進行排序。

      默認情況下,它按升序對行進行排序。 如果我們要按降序對它們進行排序,我們需要使用DESC子句。

      ORDER BY子句語法ORDER BY    [DESC]

      語法:.,.,  .... .

      S.No.

      語法元素

      描述

      1。

      它是節(jié)點的標簽名稱。

      2。

      它是節(jié)點的屬性名稱。

      示例MATCH (emp:Employee) RETURN emp.empid,emp.name,emp.salary,emp.deptno ORDER BY emp.name

      10.UNION子句

      與SQL一樣,Neo4j CQL有兩個子句,將兩個不同的結果合并成一組結果

      UNION

      UNION ALL

      UNION子句

      它將兩組結果中的公共行組合并返回到一組結果中。 它不從兩個節(jié)點返回重復的行。

      限制:

      結果列類型和來自兩組結果的名稱必須匹配,這意味著列名稱應該相同,列的數(shù)據(jù)類型應該相同。

      UNION子句語法   UNION

      S.No.

      語法元素

      描述

      1。

      它是CQL MATCH命令,由UNION子句使用。

      2。

      它是CQL MATCH命令兩個由UNION子句使用。

      3。

      UNION

      它是UNION子句的Neo4j CQL關鍵字。

      注意 -

      如果這兩個查詢不返回相同的列名和數(shù)據(jù)類型,那么它拋出一個錯誤。

      示例MATCH (cc:CreditCard) RETURN cc.id,cc.number UNION MATCH (dc:DebitCard) RETURN dc.id,dc.number

      UNION ALL子句

      它結合并返回兩個結果集的所有行成一個單一的結果集。它還返回由兩個節(jié)點重復行。

      限制

      結果列類型,并從兩個結果集的名字必須匹配,這意味著列名稱應該是相同的,列的數(shù)據(jù)類型應該是相同的。

      UNION ALL子句語法UNION ALL

      示例MATCH (cc:CreditCard) RETURN cc.id,cc.number UNION ALL MATCH (dc:DebitCard) RETURN dc.id,dc.number

      11.LIMIT和SKIP子句

      Neo4j CQL已提供LIMIT子句和SKIP來過濾或限制查詢返回的行數(shù)。

      簡單來說:LIMIT返回前幾行,SKIP返回后幾行。

      LIMIT 示例MATCH (emp:Employee)  RETURN emp LIMIT 2

      它只返回Top的兩個結果,因為我們定義了limit = 2。這意味著前兩行。

      SKIP示例MATCH (emp:Employee)  RETURN emp SKIP 2

      它只返回來自Bottom的兩個結果,因為我們定義了skip = 2。這意味著最后兩行。

      12.MERGE命令

      Neo4j使用CQL MERGE命令 -

      創(chuàng)建節(jié)點,關系和屬性

      為從數(shù)據(jù)庫檢索數(shù)據(jù)

      MERGE命令是CREATE命令和MATCH命令的組合。MERGE = CREATE + MATCH

      Neo4j CQL MERGE命令在圖中搜索給定模式,如果存在,則返回結果

      如果它不存在于圖中,則它創(chuàng)建新的節(jié)點/關系并返回結果。

      Neo4j CQL MERGE語法MERGE (:{    :<1-Value>    .....    :})

      注意 -

      Neo4j CQL MERGE命令語法與CQL CREATE命令類似。

      我們將使用這兩個命令執(zhí)行以下操作 -

      創(chuàng)建具有一個屬性的配置文件節(jié)點:Id,名稱

      創(chuàng)建具有相同屬性的同一個Profile節(jié)點:Id,Name

      檢索所有Profile節(jié)點詳細信息并觀察結果

      我們將使用CREATE命令執(zhí)行這些操作:MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})MATCH  (gp1:GoogleProfile1)  RETURN gp1.Id,gp1.Name

      如果我們觀察上面的查詢結果,它只顯示一行,因為CQL MERGE命令檢查該節(jié)點在數(shù)據(jù)庫中是否可用。 如果它不存在,它創(chuàng)建新節(jié)點。 否則,它不創(chuàng)建新的。

      通過觀察這些結果,我們可以說,CQL MERGE命令將新的節(jié)點添加到數(shù)據(jù)庫,只有當它不存在。

      13.NULL值

      Neo4j CQL將空值視為對節(jié)點或關系的屬性的缺失值或未定義值。

      當我們創(chuàng)建一個具有現(xiàn)有節(jié)點標簽名稱但未指定其屬性值的節(jié)點時,它將創(chuàng)建一個具有NULL屬性值的新節(jié)點。

      讓我們用一個例子來看這個。MATCH (e:Employee)  WHERE e.id IS NOT NULL RETURN e.id,e.name,e.sal,e.deptno

      提供了一個WHERE子句來過濾該行,即Id屬性不應該包含NULL值。MATCH (e:Employee)  WHERE e.id IS NULL RETURN e.id,e.name,e.sal,e.deptno

      這里我們使用IS操作符來僅返回NULL行。

      14.IN操作符

      與SQL一樣,Neo4j CQL提供了一個IN運算符,以便為CQL命令提供值的集合。

      IN操作符語法IN[]

      它是由逗號運算符分隔的值的集合。

      示例MATCH (e:Employee)  WHERE e.id IN [123,124] RETURN e.id,e.name,e.sal,e.deptno

      15.INDEX索引

      Neo4j SQL支持節(jié)點或關系屬性上的索引,以提高應用程序的性能。

      我們可以為具有相同標簽名稱的所有節(jié)點的屬性創(chuàng)建索引。

      我們可以在MATCH或WHERE或IN運算符上使用這些索引列來改進CQL Command的執(zhí)行。

      Neo4J索引操作

      Create Index 創(chuàng)建索引

      Drop Index 丟棄索引

      我們將在本章中用示例來討論這些操作。

      創(chuàng)建索引的語法:CREATE INDEX ON : ()

      注意:-

      冒號(:)運算符用于引用節(jié)點或關系標簽名稱。

      上述語法描述它在節(jié)點或關系的的上創(chuàng)建一個新索引。

      示例CREATE INDEX ON :Customer (name)

      刪除索引的語法:DROP INDEX ON : ()

      示例DROP INDEX ON :Customer (name)

      16.UNIQUE約束

      在Neo4j數(shù)據(jù)庫中,CQL CREATE命令始終創(chuàng)建新的節(jié)點或關系,這意味著即使您使用相同的值,它也會插入一個新行。 根據(jù)我們對某些節(jié)點或關系的應用需求,我們必須避免這種重復。 然后我們不能直接得到這個。 我們應該使用一些數(shù)據(jù)庫約束來創(chuàng)建節(jié)點或關系的一個或多個屬性的規(guī)則。

      像SQL一樣,Neo4j數(shù)據(jù)庫也支持對NODE或Relationship的屬性的UNIQUE約束

      UNIQUE約束的優(yōu)點

      避免重復記錄。

      強制執(zhí)行數(shù)據(jù)完整性規(guī)則

      創(chuàng)建唯一約束語法CREATE CONSTRAINT ON () ASSERT  IS UNIQUE

      語法說明:

      S.No.

      語法元素

      描述

      1。

      CREATE CONSTRAINT ON

      它是一個Neo4j CQL關鍵字。

      2。

      它是節(jié)點或關系的標簽名稱。

      3。

      ASSERT

      它是一個Neo4j CQL關鍵字。

      4。

      它是節(jié)點或關系的屬性名稱。

      5。

      IS UNIQUE

      它是一個Neo4j CQL關鍵字,通知Neo4j數(shù)據(jù)庫服務器創(chuàng)建一個唯一約束。

      注意:-

      上述語法描述了只需要 節(jié)點或關系就可以創(chuàng)造一個獨特的約束。

      示例CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE

      注意

      如果創(chuàng)建約束時節(jié)點屬性有重復值,Neo4j DB服務器將會拋出一個錯誤,表示無法創(chuàng)建。

      刪除UNIQUE約束語法:DROP CONSTRAINT ON () ASSERT  IS UNIQUE

      示例DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE

      17.DISTINCT獨特

      這個函數(shù)的用法就像SQL中的distinct關鍵字,返回的是所有不同值。

      示例

      MATCH (n:Movie) RETURN Distinct(n.name)

      返回的是

      第五章:解釋

      1.圖形字體

      關于Neo4j提供的圖形瀏覽器,我們可以從其中查看節(jié)點的屬性,或者改變其中的節(jié)點的大小顏色。

      2.ID屬性

      在Neo4j中,“Id”是節(jié)點和關系的默認內部屬性。 這意味著,當我們創(chuàng)建一個新的節(jié)點或關系時,Neo4j數(shù)據(jù)庫服務器將為內部使用分配一個數(shù)字。 它會自動遞增。

      我們從一個例子去看:

      新增一個節(jié)點CREATE (tweet:Tweet{message:"Hello"})

      查看該節(jié)點MATCH (n:Tweet) RETURN n

      3.Caption標題

      所謂的Caption標題,就是更改Neo4j瀏覽器的節(jié)點顯示的文字(圓圈內部)。比如

      我們點擊下圖所示:

      圓圈內部變?yōu)榱薸d值。

      第六章:函數(shù)

      1.字符串函數(shù)

      與SQL一樣,Neo4J CQL提供了一組String函數(shù),用于在CQL查詢中獲取所需的結果。

      這里我們將討論一些重要的和經常使用的功能。

      字符串函數(shù)列表

      S.No.

      功能

      描述

      1。

      UPPER

      它用于將所有字母更改為大寫字母。

      2。

      LOWER

      它用于將所有字母改為小寫字母。

      3。

      SUBSTRING

      它用于獲取給定String的子字符串。

      4。

      REPLACE

      它用于替換一個字符串的子字符串。

      注意:所有CQL函數(shù)應使用“()”括號。

      現(xiàn)在我們將通過示例詳細討論每個Neo4J CQL字符串函數(shù)

      1.UPPER

      它需要一個字符串作為輸入并轉換為大寫字母。 所有CQL函數(shù)應使用“()”括號。

      函數(shù)語法UPPER ()

      注意:-

      可以是來自Neo4J數(shù)據(jù)庫的節(jié)點或關系的屬性名稱。

      示例MATCH (e:Employee)  RETURN e.id,UPPER(e.name),e.sal,e.deptno

      2.LOWER

      它需要一個字符串作為輸入并轉換為小寫字母。 所有CQL函數(shù)應使用“()”括號。

      函數(shù)語法LOWER ()

      注意:-

      可以是來自Neo4J數(shù)據(jù)庫的節(jié)點或關系的屬性名稱MATCH (e:Employee)  RETURN e.id,LOWER(e.name),e.sal,e.deptno

      3.SUBSTRING

      它接受一個字符串作為輸入和兩個索引:一個是索引的開始,另一個是索引的結束,并返回從StartInded到EndIndex-1的子字符串。 所有CQL函數(shù)應使用“()”括號。

      函數(shù)的語法SUBSTRING(, ,)

      注意:-

      在Neo4J CQL中,如果一個字符串包含n個字母,則它的長度為n,索引從0開始,到n-1結束。

      是SUBSTRING函數(shù)的索引值。

      是可選的。 如果我們省略它,那么它返回給定字符串的子串從startIndex到字符串的結尾。

      示例MATCH (e:Employee)  RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno

      2.AGGREGATION聚合

      和SQL一樣,Neo4j CQL提供了一些在RETURN子句中使用的聚合函數(shù)。 它類似于SQL中的GROUP BY子句。

      我們可以使用MATCH命令中的RETURN +聚合函數(shù)來處理一組節(jié)點并返回一些聚合值。

      聚合函數(shù)列表

      S.No.

      聚集功能

      描述

      1。

      COUNT

      它返回由MATCH命令返回的行數(shù)。

      2。

      MAX

      它從MATCH命令返回的一組行返回最大值。

      3。

      MIN

      它返回由MATCH命令返回的一組行的最小值。

      4。

      SUM

      它返回由MATCH命令返回的所有行的求和值。

      5。

      AVG

      它返回由MATCH命令返回的所有行的平均值。

      現(xiàn)在我們將通過示例詳細討論每個Neo4j CQL AGGREGATION函數(shù)

      計數(shù)

      它從MATCH子句獲取結果,并計算結果中出現(xiàn)的行數(shù),并返回該計數(shù)值。 所有CQL函數(shù)應使用“()”括號。

      函數(shù)語法COUNT()

      注意 -

      可以是*,節(jié)點或關系標簽名稱或屬性名稱。

      示例MATCH (e:Employee) RETURN COUNT(*)

      MAX

      它采用一組行和節(jié)點或關系的作為輸入,并從給定行的give 列中查找最小值。

      函數(shù)語法MAX( )

      MIN

      它采用一組行和節(jié)點或關系的作為輸入,并從給定行的give 列中查找最小值。

      函數(shù)語法MIN( )

      注意 -

      應該是節(jié)點或關系的名稱。

      讓我們用一個例子看看MAX和MIN的功能。

      示例MATCH (e:Employee)  RETURN MAX(e.sal),MIN(e.sal)

      AVG

      它采用一組行和節(jié)點或關系的作為輸入,并從給定行的give 列中查找平均值。

      函數(shù)的語法AVG( )

      SUM

      它采用一組行和節(jié)點或關系的作為輸入,并從給定行的give 列中查找求和值。

      函數(shù)的語法SUM( )

      讓我們用一個例子來檢查SUM和AVG函數(shù)。MATCH (e:Employee)  RETURN SUM(e.sal),AVG(e.sal)

      此命令從數(shù)據(jù)庫中可用的所有Employee節(jié)點查找總和平均值.

      3.關系函數(shù)

      Neo4j CQL提供了一組關系函數(shù),以在獲取開始節(jié)點,結束節(jié)點等細節(jié)時知道關系的細節(jié)。

      關系函數(shù)列表

      S.No.

      功能

      描述

      1。

      STARTNODE

      它用于知道關系的開始節(jié)點。

      2。

      ENDNODE

      它用于知道關系的結束節(jié)點。

      3。

      ID

      它用于知道關系的ID。

      4。

      TYPE

      它用于知道字符串表示中的一個關系的TYPE。

      現(xiàn)在我們將通過示例詳細討論每個Neo4j CQL關系函數(shù)

      STARTNODE

      它需要一個字符串作為輸入并轉換為大寫字母。 所有CQL函數(shù)應使用“()”括號。

      函數(shù)語法STARTNODE ()

      注意:-

      可以是來自Neo4j數(shù)據(jù)庫的節(jié)點或關系的屬性名稱。

      示例MATCH (a)-[movie:ACTION_MOVIES]->(b)  RETURN STARTNODE(movie)

      ENDNODEMATCH (a)-[movie:ACTION_MOVIES]->(b)  RETURN ENDNODE(movie)

      ID TYPEMATCH (a)-[movie:ACTION_MOVIES]->(b)  RETURN ID(movie),TYPE(movie)

      第七章:管理員

      1.數(shù)據(jù)庫備份

      在對Neo4j數(shù)據(jù)進行備份、還原、遷移的操作時,首先要關閉neo4j;cd %NEO4J_HOME%/bin./neo4j stop

      數(shù)據(jù)備份到文件./neo4j-admin  dump --database=graph.db --to=/home/2018.dump

      之后,進行數(shù)據(jù)還原,將生成的存儲文件拷貝到另一個相同版本的環(huán)境中。

      2.數(shù)據(jù)庫恢復

      還原、遷移之前 ,關閉neo4j服務。操作同上;

      數(shù)據(jù)導入:./neo4j-admin load --from=/home/2016-10-02.dump --database=graph.db --force

      重啟服務:./neo4j start

      第八章:Spring Data Neo4j

      1.簡單介紹

      Neo4j提供JAVA API以編程方式執(zhí)行所有數(shù)據(jù)庫操作。

      具體Neo4j如何在原生Java程序編程,以及與Spring的集成,本章暫不討論。

      Spring數(shù)據(jù)模塊的優(yōu)點:

      消除DAO層中的boiler plate代碼

      DAO層中的工件少

      易于開發(fā)和維護

      改進開發(fā)過程

      Spring數(shù)據(jù)模塊功能:

      支持基于XML的實體映射

      支持基于注釋的實體映射

      支持分頁

      支持事務

      更少的DAO層工件 - 實現(xiàn)存儲庫

      Spring DATA Neo4j模塊具有與上述相同的優(yōu)點和特點。

      接下來,我們將基于Spring Boot在IDEA上開發(fā)Neo4j應用程序,需要注意的是Springboot的版本

      2.新建項目

      我們選擇web和Neo4j兩個依賴即可,這里有必要說一下,如果你是使用Spring boot2.0以上,在你創(chuàng)建項目完成后,啟動程序會報錯:Caused by: java.lang.ClassNotFoundException: org.neo4j.ogm.drivers.http.driver.HttpDriver     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_111]     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_111]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_111]     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_111]     at java.lang.Class.forName0(Native Method) ~[na:1.8.0_111]     at java.lang.Class.forName(Class.java:264) ~[na:1.8.0_111]     at org.neo4j.ogm.session.SessionFactory.newDriverInstance(SessionFactory.java:92) ~[neo4j-ogm-core-3.1.0.jar:3.1.0]     ... 45 common frames omitted

      原因是缺少依賴,解決方法是導入缺少的依賴:                    org.neo4j            neo4j-ogm-http-driver        

      如果你的Spring boot版本為1.5.x,那么你只需要spring-data-neo4j即可:                    org.springframework.boot            spring-boot-starter-data-neo4j        

      3.節(jié)點與關系

      新建節(jié)點類,id的屬性為Long而不能為long,還需要注意的是在Spring boot1.5中修飾id屬性的注釋為@GraphId,org.neo4j.ogm.annotation.Id不存在,效果一樣,都是Neo4j數(shù)據(jù)庫自動創(chuàng)建的ID值。@NodeEntity(label = "Bot") public class BotNode {     @Id     @GeneratedValue     private Long id; //id     @Property(name = "name")     private String name;//名     @Property(name = "kind")     private String kind;//類     @Property(name = "weight")     private long weight;//權重public BotNode() {}public BotNode(Long id, String name, String kind, long weight) {     this.id = id;     this.name = name;     this.kind = kind;     this.weight = weight;}public Long getId() {     return id;}public void setId(Long id) {     this.id = id;}public String getName() {     return name;}public void setName(String name) {     this.name = name;}public String getKind() {     return kind;}public void setKind(String kind) {     this.kind = kind;}public long getWeight() {     return weight;}public void setWeight(long weight) {     this.weight = weight;} @Overridepublic String toString() {     return "BotNode{" +             "id=" + id +             ", name='" + name + '\'' +             ", kind='" + kind + '\'' +             ", weight=" + weight +             '}';}}

      新建節(jié)點關系類

      有必要說明一下, @StartNode 和@EndNode注釋的類可以不是同一個類。@RelationshipEntity(type = "BotRelation") public class BotRelation { @Id @GeneratedValue private Long id; @StartNode private BotNode startNode; @EndNode private BotNode endNode; @Property private String relation;public BotRelation() {}public BotRelation(Long id, BotNode startNode, BotNode endNode, String relation) {     this.id = id;     this.startNode = startNode;     this.endNode = endNode;     this.relation = relation;}public String getRelation() {     return relation;}public void setRelation(String relation) {     this.relation = relation;}public Long getId() {     return id;}public void setId(Long id) {     this.id = id;}public BotNode getStartNode() {     return startNode;}public void setStartNode(BotNode startNode) {     this.startNode = startNode;}public BotNode getEndNode() {     return endNode;}public void setEndNode(BotNode endNode) {     this.endNode = endNode;} @Overridepublic String toString() {     return "BotRelation{" +             "id=" + id +             ", startNode=" + startNode +             ", endNode=" + endNode +             ", relation='" + relation + '\'' +             '}';}}

      4.Repository

      我們只需要使接口繼承Neo4jRepository就可以使用該接口提供的一些基礎的增刪改查方法。@Repository public interface BotRepository extends Neo4jRepository { BotNode findAllByName(String name);}

      對于復雜的查詢我們可以參照上面講到的CQL語句執(zhí)行。@Repository public interface BotRelationRepository extends Neo4jRepository { //返回節(jié)點n以及n指向的所有節(jié)點與關系 @Query("MATCH p=(n:Bot)-[r:BotRelation]->(m:Bot) WHERE id(n)={0} RETURN p") List findAllByBotNode(BotNode botNode);//返回節(jié)點n以及n指向或指向n的所有節(jié)點與關系 @Query("MATCH p=(n:Bot)<-[r:BotRelation]->(m:Bot) WHERE m.name={name} RETURN p") List findAllBySymptom(@Param("name") String name);//返回節(jié)點n以及n指向或指向n的所有節(jié)點以及這些節(jié)點間的所有關系 @Query("MATCH p=(n:Bot)<-[r:BotRelation]->(m:Bot)<-[:BotRelation]->(:Bot)<-[:BotRelation]->(n:Bot) WHERE n.name={name} RETURN p") List findAllByStartNode(@Param("name") String name);}

      5.單元測試

      保存@RunWith(SpringRunner.class) @SpringBootTest public class Neo4jApplicationTests { @Autowired MovieRepository movieRepository;@Testpublic void contextLoads() {     movieRepository.save(new Movie("《奧特曼》"));     System.out.println(movieRepository.findAll());}}

      查看打?。篬Movie{id=8183, name='《奧特曼》'}]

      保存成功!

      補充

      如果想保存關系的話MedicalNode node = new MedicalNode(-1l,"節(jié)點","測試"); medicalNodeRepository.save(node); MedicalNode node1 = new MedicalNode(-1l,"節(jié)點","測試"); medicalNodeRepository.save(node1); medicalRelationRepository.save(new MedicalRelation(-1l,node,node1,"關系"));

      更新

      接下來我們測試更新數(shù)據(jù):    @Test public void updata(){ Movie movie = movieRepository.findAllById(8183l); movie.setName("《迪迦》"); movieRepository.save(movie); System.out.println(movieRepository.findAll()); }

      執(zhí)行程序,報錯:java.lang.NullPointerException

      我們看到程序執(zhí)行的CQL語句為:MATCH (n:Movie) WHERE n.id = { id_0 } WITH n RETURN n, ID(n)

      然后我們在Neo4j瀏覽器控制臺執(zhí)行查詢語句:

      這是為什么呢?在Neo4j中,根據(jù)Id查詢節(jié)點的語句為:MATCH (n:Movie) where id(n)=8183  RETURN n

      我們修改Repository層的查詢方法:@Repository public interface MovieRepository extends Neo4jRepository { @Query("MATCH (n:Movie) where id(n)=  RETURN n") Movie findAllById(@Param("id") Long id); }

      再次執(zhí)行更新程序,結果為:[Movie{id=8183, name='《迪迦》'}]

      更新成功!

      換句話說,只要掌握了CQL語句,就基本啥都會了~! 還有,本書并不代表全部的Neo4j知識。

      附錄 neo4j.conf漢化版For more details and a complete list of settings, please see https:///docs/operations-manual/current/reference/configuration-settings/

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多