2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

史上超全面的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ù)庫的所有特性。程序員工作在一個面向?qū)ο蟮?、靈活的網(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 文件內(nèi),找到下面一行,將注釋#號去掉就可以了 #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 文件內(nèi),找到下面一行,將注釋#號去掉就可以了 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查詢返回的結果進行排序。

我們可以按升序或降序?qū)π羞M行排序。

默認情況下,它按升序?qū)π羞M行排序。 如果我們要按降序?qū)λ鼈冞M行排序,我們需要使用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é)點和關系的默認內(nèi)部屬性。 這意味著,當我們創(chuàng)建一個新的節(jié)點或關系時,Neo4j數(shù)據(jù)庫服務器將為內(nèi)部使用分配一個數(shù)字。 它會自動遞增。

我們從一個例子去看:

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

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

3.Caption標題

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

我們點擊下圖所示:

圓圈內(nèi)部變?yōu)榱薸d值。

第六章:函數(shù)

1.字符串函數(shù)

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

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

字符串函數(shù)列表

S.No.

功能

描述

1。

UPPER

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

2。

LOWER

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

3。

SUBSTRING

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

4。

REPLACE

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

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

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

1.UPPER

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

函數(shù)語法UPPER ()

注意:-

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

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

2.LOWER

它需要一個字符串作為輸入并轉(zhuǎn)換為小寫字母。 所有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é)點或關系標簽名稱或?qū)傩悦Q。

示例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

它需要一個字符串作為輸入并轉(zhuǎn)換為大寫字母。 所有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)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多