国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

圖數(shù)據(jù)庫Neo4j(最詳細(xì)教程)

這篇具有很好參考價值的文章主要介紹了圖數(shù)據(jù)庫Neo4j(最詳細(xì)教程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

圖數(shù)據(jù)庫Neo4j實(shí)戰(zhàn)(全網(wǎng)最詳細(xì)教程)

1. 圖數(shù)據(jù)庫Neo4j介紹

1.1 什么是圖數(shù)據(jù)庫(graph database)

? 隨著社交、電商、金融、零售、物聯(lián)網(wǎng)等行業(yè)的快速發(fā)展,現(xiàn)實(shí)社會織起了了一張龐大而復(fù)雜的關(guān)系網(wǎng),傳統(tǒng)數(shù)據(jù)庫很難處理關(guān)系運(yùn)算。大數(shù)據(jù)行業(yè)需要處理的數(shù)據(jù)之間的關(guān)系隨數(shù)據(jù)量呈幾何級數(shù)增長,急需一種支持海量復(fù)雜數(shù)據(jù)關(guān)系運(yùn)算的數(shù)據(jù)庫,圖數(shù)據(jù)庫應(yīng)運(yùn)而生。

? 世界上很多著名的公司都在使用圖數(shù)據(jù)庫,比如:

  • 社交領(lǐng)域:Facebook, Twitter,Linkedin用它來管理社交關(guān)系,實(shí)現(xiàn)好友推薦

  • 零售領(lǐng)域:eBay,沃爾瑪使用它實(shí)現(xiàn)商品實(shí)時推薦,給買家更好的購物體驗(yàn)

  • 金融領(lǐng)域:摩根大通,花旗和瑞銀等銀行在用圖數(shù)據(jù)庫做風(fēng)控處理

  • 汽車制造領(lǐng)域:沃爾沃,戴姆勒和豐田等頂級汽車制造商依靠圖數(shù)據(jù)庫推動創(chuàng)新制造解決方案

  • 電信領(lǐng)域:Verizon, Orange和AT&T 等電信公司依靠圖數(shù)據(jù)庫來管理網(wǎng)絡(luò),控制訪問并支持客戶360

  • 酒店領(lǐng)域:萬豪和雅高酒店等頂級酒店公司依使用圖數(shù)據(jù)庫來管理復(fù)雜且快速變化的庫存

    圖數(shù)據(jù)庫并非指存儲圖片的數(shù)據(jù)庫,而是以圖數(shù)據(jù)結(jié)構(gòu)存儲和查詢數(shù)據(jù)。

圖數(shù)據(jù)庫是基于圖論實(shí)現(xiàn)的一種NoSQL數(shù)據(jù)庫,其數(shù)據(jù)存儲結(jié)構(gòu)和數(shù)據(jù)查詢方式都是以圖論為基礎(chǔ)的,圖數(shù)據(jù)庫主要用于存儲更多的連接數(shù)據(jù)。

圖論〔Graph Theory〕是數(shù)學(xué)的一個分支。它以圖為研究對象圖論中的圖是由若干給定的點(diǎn)及連接兩點(diǎn)的線所構(gòu)成的圖形,這種圖形通常用來描述某些事物之間的某種特定關(guān)系,用點(diǎn)代表事物,用連接兩點(diǎn)的線表示相應(yīng)兩個事物間具有這種關(guān)系。

使用 Google+(GooglePlus)應(yīng)用程序來了解現(xiàn)實(shí)世界中 Graph 數(shù)據(jù)庫的需求。 觀察下面的圖表。

在這里,我們用圓圈表示了Google+應(yīng)用個人資料

在上圖中,輪廓“A”具有圓圈以連接到其他輪廓:家庭圈(B,C,D)和朋友圈(B,C)。

再次,如果我們打開配置文件“B”,我們可以觀察以下鏈接的數(shù)據(jù)。

? 像這樣,這些應(yīng)用程序包含大量的結(jié)構(gòu)化,半結(jié)構(gòu)化和非結(jié)構(gòu)化的連接數(shù)據(jù)。 在 RDBMS 數(shù)據(jù)庫中表示這種非結(jié)構(gòu)化連接數(shù)據(jù)并不容易。如果我們在 RDBMS 數(shù)據(jù)庫中存儲這種更多連接的數(shù)據(jù),那么檢索或遍歷是非常困難和緩慢的。所以要表示或存儲這種更連接的數(shù)據(jù),我們應(yīng)該選擇一個流行的圖數(shù)據(jù)庫。
? 圖數(shù)據(jù)庫非常容易地存儲這種更多連接的數(shù)據(jù)。 它將每個配置文件數(shù)據(jù)作為節(jié)點(diǎn)存儲在內(nèi)部,它與相鄰節(jié)點(diǎn)連接的節(jié)點(diǎn),它們通過關(guān)系相互連接。他們存儲這種連接的數(shù)據(jù)與上面的圖表中的相同,這樣檢索或遍歷是非常容易和更快的。

關(guān)系查詢性能對比:

? 在數(shù)據(jù)關(guān)系中心,圖形數(shù)據(jù)庫在查詢速度方面非常高效,即使對于深度和復(fù)雜的查詢也是如此。在關(guān)系型數(shù)據(jù)庫和圖數(shù)據(jù)庫(Neo4j)之間進(jìn)行了實(shí)驗(yàn):在一個社交網(wǎng)絡(luò)里找到 大深度為5的朋友的朋友,他們的數(shù)據(jù)集包括100萬人,每人約有50個朋友。
實(shí)驗(yàn)結(jié)果如下:

對比關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫(RDBMS) 圖數(shù)據(jù)庫
節(jié)點(diǎn)
列和數(shù)據(jù) 屬性和關(guān)系
約束 關(guān)系

在關(guān)系型數(shù)據(jù)庫中,Person和department之間用外鍵表示關(guān)系:

在圖數(shù)據(jù)庫中,節(jié)點(diǎn)和關(guān)系取代表,外鍵和join:

在圖數(shù)據(jù)庫中,無論何時運(yùn)行類似JOIN的操作,數(shù)據(jù)庫都會使用此列表并直接訪問連接的節(jié)點(diǎn),而無需進(jìn)行昂貴的搜索和匹配計(jì)算。

對比其他NoSQL數(shù)據(jù)庫:

NoSQL數(shù)據(jù)庫大致可以分為四類:

  • 鍵值(key/value)數(shù)據(jù)庫
  • 列存儲數(shù)據(jù)庫
  • 文檔型數(shù)據(jù)庫
  • 圖數(shù)據(jù)庫

1.2 什么是Neo4j

Neo4j是一個開源的NoSQL圖形數(shù)據(jù)庫,2003 年開始開發(fā),使用 scala和java 語言,2007年開始發(fā)布。

  • 是世界上 先進(jìn)的圖數(shù)據(jù)庫之一,提供原生的圖數(shù)據(jù)存儲,檢索和處理;

  • 采用屬性圖模型(Property graph model),極大的完善和豐富圖數(shù)據(jù)模型;

  • 專屬查詢語言 Cypher,直觀,高效;

官網(wǎng): https://neo4j.com/

Neo4j的特性:

  • SQL就像簡單的查詢語言Neo4j CQL
  • 它遵循屬性圖數(shù)據(jù)模型
  • 它通過使用Apache Lucence支持索引
  • 它支持UNIQUE約束
  • 它包含一個用于執(zhí)行CQL命令的UI:Neo4j數(shù)據(jù)瀏覽器
  • 它支持完整的ACID(原子性,一致性,隔離性和持久性)規(guī)則
  • 它采用原生圖形庫與本地GPE(圖形處理引擎)
  • 它支持查詢的數(shù)據(jù)導(dǎo)出到JSON和XLS格式
  • 它提供了REST API,可以被任何編程語言(如Java,Spring,Scala等)訪問
  • 它提供了可以通過任何UI MVC框架(如Node JS)訪問的Java腳本
  • 它支持兩種Java API:Cypher API和Native Java API來開發(fā)Java應(yīng)用程序

Neo4j的優(yōu)點(diǎn):

  • 它很容易表示連接的數(shù)據(jù)
  • 檢索/遍歷/導(dǎo)航更多的連接數(shù)據(jù)是非常容易和快速的
  • 非常容易地表示半結(jié)構(gòu)化數(shù)據(jù)
  • Neo4j CQL查詢語句命令是人性化的可讀格式,非常容易學(xué)習(xí)
  • 使用簡單而強(qiáng)大的數(shù)據(jù)模型
  • 不需要復(fù)雜的連接來檢索連接的/相關(guān)的數(shù)據(jù),因?yàn)樗苋菀讬z索它的相鄰節(jié)點(diǎn)或關(guān)系細(xì)節(jié)沒有連接或索引

1.3 Neo4j數(shù)據(jù)模型

圖論基礎(chǔ)

? 圖是一組節(jié)點(diǎn)和連接這些節(jié)點(diǎn)的關(guān)系,圖形以屬性的形式將數(shù)據(jù)存儲在節(jié)點(diǎn)和關(guān)系中,屬性是用于表示數(shù)據(jù)的鍵值對。
? 在圖論中,我們可以表示一個帶有圓的節(jié)點(diǎn),節(jié)點(diǎn)之間的關(guān)系用一個箭頭標(biāo)記表示。
? 簡單的可能圖是單個節(jié)點(diǎn):

我們可以使用節(jié)點(diǎn)表示社交網(wǎng)絡(luò)(如Google+(GooglePlus)個人資料),它不包含任何屬性。向Google+個人資料添加一些屬性:

在兩個節(jié)點(diǎn)之間建立關(guān)系:

此處在兩個配置文件之間創(chuàng)建關(guān)系名稱“跟隨”。 這意味著 Profile-I 遵循 Profile-II。

屬性圖模型

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

  • 表示節(jié)點(diǎn),關(guān)系和屬性中的數(shù)據(jù)
  • 節(jié)點(diǎn)和關(guān)系都包含屬性
  • 關(guān)系連接節(jié)點(diǎn)
  • 屬性是鍵值對
  • 節(jié)點(diǎn)用圓圈表示,關(guān)系用方向鍵表示。
  • 關(guān)系具有方向:單向和雙向。
  • 每個關(guān)系包含“開始節(jié)點(diǎn)”或“從節(jié)點(diǎn)”和“到節(jié)點(diǎn)”或“結(jié)束節(jié)點(diǎn)”

? 在屬性圖數(shù)據(jù)模型中,關(guān)系應(yīng)該是定向的。如果我們嘗試創(chuàng)建沒有方向的關(guān)系,那么它將拋出一個錯誤消息。在Neo4j中,關(guān)系也應(yīng)該是有方向性的。如果我們嘗試創(chuàng)建沒有方向的關(guān)系,那么Neo4j會拋出一個錯誤消息,“關(guān)系應(yīng)該是方向性的”。
? Neo4j圖數(shù)據(jù)庫將其所有數(shù)據(jù)存儲在節(jié)點(diǎn)和關(guān)系中,我們不需要任何額外的RDBMS數(shù)據(jù)庫或NoSQL數(shù)據(jù)庫來存儲Neo4j數(shù)據(jù)庫數(shù)據(jù),它以圖的形式存儲數(shù)據(jù)。Neo4j使用本機(jī)GPE(圖形處理引擎)來使用它的本機(jī)圖存儲格式。

圖數(shù)據(jù)庫數(shù)據(jù)模型的主要構(gòu)建模塊是:

  • 節(jié)點(diǎn)
  • 關(guān)系
  • 屬性

簡單的屬性圖的例子:

這里我們使用圓圈表示節(jié)點(diǎn)。 使用箭頭表示關(guān)系,關(guān)系是有方向性的。 我們可以用Properties(鍵值對)來表示Node的數(shù)據(jù)。 在這個例子中,我們在Node的Circle中表示了每個Node的Id屬性。

1.4 Neo4j的構(gòu)建元素

Neo4j圖數(shù)據(jù)庫主要有以下構(gòu)建元素:

  • 節(jié)點(diǎn)
  • 屬性
  • 關(guān)系
  • 標(biāo)簽
  • 數(shù)據(jù)瀏覽器

節(jié)點(diǎn)

節(jié)點(diǎn)(Node)是圖數(shù)據(jù)庫中的一個基本元素,用來表示一個實(shí)體記錄,就像關(guān)系數(shù)據(jù)庫中的一條記錄一 樣。在Neo4j中節(jié)點(diǎn)可以包含多個屬性(Property)和多個標(biāo)簽(Label)。

  • 節(jié)點(diǎn)是主要的數(shù)據(jù)元素
  • 節(jié)點(diǎn)通過關(guān)系連接到其他節(jié)點(diǎn)
  • 節(jié)點(diǎn)可以具有一個或多個屬性(即,存儲為鍵/值對的屬性)
  • 節(jié)點(diǎn)有一個或多個標(biāo)簽,用于描述其在圖表中的作用

屬性

屬性(Property)是用于描述圖節(jié)點(diǎn)和關(guān)系的鍵值對。其中Key是一個字符串,值可以通過使用任何 Neo4j數(shù)據(jù)類型來表示

  • 屬性是命名值,其中名稱(或鍵)是字符串
  • 屬性可以被索引和約束
  • 可以從多個屬性創(chuàng)建復(fù)合索引

關(guān)系

關(guān)系(Relationship)同樣是圖數(shù)據(jù)庫的基本元素。當(dāng)數(shù)據(jù)庫中已經(jīng)存在節(jié)點(diǎn)后,需要將節(jié)點(diǎn)連接起來 構(gòu)成圖。關(guān)系就是用來連接兩個節(jié)點(diǎn),關(guān)系也稱為圖論的邊(Edge) ,其始端和末端都必須是節(jié)點(diǎn),關(guān)系不 能指向空也不能從空發(fā)起。關(guān)系和節(jié)點(diǎn)一樣可以包含多個屬性,但關(guān)系只能有一個類型(Type) 。

  • 關(guān)系連接兩個節(jié)點(diǎn)
  • 關(guān)系是方向性的
  • 節(jié)點(diǎn)可以有多個甚至遞歸的關(guān)系
  • 關(guān)系可以有一個或多個屬性(即存儲為鍵/值對的屬性)

基于方向性,Neo4j關(guān)系被分為兩種主要類型:

  • 單向關(guān)系
  • 雙向關(guān)系

標(biāo)簽

標(biāo)簽(Label)將一個公共名稱與一組節(jié)點(diǎn)或關(guān)系相關(guān)聯(lián), 節(jié)點(diǎn)或關(guān)系可以包含一個或多個標(biāo)簽。 我們 可以為現(xiàn)有節(jié)點(diǎn)或關(guān)系創(chuàng)建新標(biāo)簽, 我們可以從現(xiàn)有節(jié)點(diǎn)或關(guān)系中刪除標(biāo)簽。

  • 標(biāo)簽用于將節(jié)點(diǎn)分組
  • 一個節(jié)點(diǎn)可以具有多個標(biāo)簽
  • 對標(biāo)簽進(jìn)行索引以加速在圖中查找節(jié)點(diǎn)
  • 本機(jī)標(biāo)簽索引針對速度進(jìn)行了優(yōu)化

Neo4j 瀏覽器

一旦我們安裝Neo4j,我們就可以訪問Neo4j數(shù)據(jù)瀏覽器

訪問 http://192.168.65.200:7474/browser

1.5 使用場景

  • 欺詐檢測

  • 實(shí)時推薦引擎

2. 環(huán)境搭建

下載地址:https://neo4j.com/download-center/

安裝方式:
1、Neo4j Enterprise Server(企業(yè)版)
2、Neo4j Community Server(社區(qū)版)
3、Neo4j Desktop(桌面版)

以下為對應(yīng)的jdk1.8和neo4j的安裝包:

鏈接:https://pan.baidu.com/s/1ZjfP4JJC_QN21j-V_YejrA
提取碼:jfqq

安裝Neo4j圖型數(shù)據(jù)庫步驟:

1.安裝jdk1.8

2.安裝好jdk后,再安裝neo4j

下載好neo4j后,解壓完后,配置環(huán)境變量:

添加NEO4J_HOME系統(tǒng)變量

添加path變量

%NEO4J_HOME%\bin

配置好所有環(huán)境變量后,測試一下:

win+r打開運(yùn)行,在cmd中輸入:

neo4j.bat console

啟動后輸入Http://localhost:7474 ,訪問neo4j,默認(rèn)賬號和密碼都為neo4j

2.1安裝Neo4j Community Server

注意: neo4j最新版對應(yīng)的java版本是jdk17

jdk8可以下載Neo4j Community Edition 3.5.28

文檔:https://neo4j.com/docs/operations-manual/3.5/

解壓到新目錄(注意:目錄名稱不要有中文),比如: D:\neo4j\

# 將Neo4j作為控制臺應(yīng)用程序運(yùn)行
<NEO4J_HOME>\bin\neo4j console
# 將Neo4j作為服務(wù)使用進(jìn)行安裝
<NEO4J_HOME>\bin\neo4j install-service

console: 直接啟動 neo4j 服務(wù)器

install-service | uninstall-service | update-service : 安裝/卸載/更新 neo4j 服務(wù)

start/stop/restart/status: 啟動/停止/重啟/狀態(tài)

-V 輸出更多信息

進(jìn)入到bin目錄,執(zhí)行

neo4j console

在瀏覽器中訪問http://localhost:7474

使用用戶名neo4j和默認(rèn)密碼neo4j進(jìn)行連接,然后會提示更改密碼。

Neo4j Browser是開發(fā)人員用來探索Neo4j數(shù)據(jù)庫、執(zhí)行Cypher查詢并以表格或圖形形式查看結(jié)果的工 具。

3. Neo4j --CQL使用

3.1 Neo4j -- CQL簡介

Neo4j的Cypher語言是為處理圖形數(shù)據(jù)而構(gòu)建的,CQL代表Cypher查詢語言。像Oracle數(shù)據(jù)庫具有查詢語言SQL,Neo4j具有CQL作為查詢語言。

  • 它是Neo4j圖形數(shù)據(jù)庫的查詢語言。
  • 它是一種聲明性模式匹配語言
  • 它遵循SQL語法。
  • 它的語法是非常簡單且人性化、可讀的格式。

三個共同朋友的社交圖:

使用Cypher語言來描述關(guān)系:

(fox)<-[:knows]-(周瑜)-[:knows]->(諸葛)-[:knows]->(fox)

3.2 CQL命令使用一

CQL命令官方文檔:https://neo4j.com/docs/cypher-manual/3.5/clauses/match/

LOAD CSV

導(dǎo)入csv到neo4j

#將csv文件拷貝到 %NEO4J_HOME%\import目錄
load csv from 'file:///西游記,csv' as line
create (:西游{name:line[0],tail:line[1],label:line[3]})

CREATE 創(chuàng)建

create語句是創(chuàng)建模型語句用來創(chuàng)建數(shù)據(jù)模型

創(chuàng)建節(jié)點(diǎn)
#創(chuàng)建簡單節(jié)點(diǎn)
create (n)
#創(chuàng)建多個節(jié)點(diǎn)
create (n),(m)
#創(chuàng)建帶標(biāo)簽和屬性的節(jié)點(diǎn)并返回節(jié)點(diǎn)
create (n:person {name:'如來'}) return n
創(chuàng)建關(guān)系

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

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

基于方向性,Neo4j關(guān)系被分為兩種主要類型。

  • 單向關(guān)系
  • 雙向關(guān)系
#使用新節(jié)點(diǎn)創(chuàng)建關(guān)系
CREATE (n:person {name:'楊戩'})-[r:師傅]->(m:person {name:'玉鼎真人'}) return
type(r)
#使用已知節(jié)點(diǎn)創(chuàng)建帶屬性的關(guān)系
match (n:person {name:'沙僧'}),(m:person{name:'唐僧'})
create (n)-[r:`師傅`{relation:'師傅'}]->(m) return r
#檢索關(guān)系節(jié)點(diǎn)的詳細(xì)信息
match (n:person)-[r]-(m:person) return n,m
創(chuàng)建全路徑
create p=(:person{name:'蛟魔王'})-[:義兄]->(:person{name:'牛魔王'})<-[:義兄]-
(:person {name:'鵬魔王'}) return p

MATCH 查詢

Neo4j CQL MATCH命令用于

  • 從數(shù)據(jù)庫獲取有關(guān)節(jié)點(diǎn)和屬性的數(shù)據(jù)
  • 從數(shù)據(jù)庫獲取有關(guān)節(jié)點(diǎn),關(guān)系和屬性的數(shù)據(jù)
MATCH (n:`西游`) RETURN n LIMIT 25

RETURN返回

Neo4j CQL RETURN子句用于

  • 檢索節(jié)點(diǎn)的某些屬性
  • 檢索節(jié)點(diǎn)的所有屬性
  • 檢索節(jié)點(diǎn)和關(guān)聯(lián)關(guān)系的某些屬性
  • 檢索節(jié)點(diǎn)和關(guān)聯(lián)關(guān)系的所有屬性
MATCH (n:`西游`) RETURN id(n),n.name,n.tail,n.relation

WHERE子句

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

MATCH (n:person) where n.name='孫悟空' or n.name='豬八戒' RETURN n

#創(chuàng)建關(guān)系
match (n:person),(m:person) where n.name='孫悟空' and m.name='豬八戒'
create (n)-[r:師弟]->(m) return n.name,type(r),m.name

DELETE刪除

Neo4j使用CQL DELETE子句

  • 刪除節(jié)點(diǎn)。
  • 刪除節(jié)點(diǎn)及相關(guān)節(jié)點(diǎn)和關(guān)系。
# 刪除節(jié)點(diǎn) (前提:節(jié)點(diǎn)不存在關(guān)系)
MATCH (n:person{name:"白龍馬"}) delete n

# 刪除關(guān)系
MATCH (n:person{name:"沙僧"})<-[r]-(m) delete r return type(r)

REMOVE刪除

有時基于客戶端要求,我們需要向現(xiàn)有節(jié)點(diǎn)或關(guān)系添加或刪除屬性。我們使用Neo4j CQL REMOVE子句 來刪除節(jié)點(diǎn)或關(guān)系的現(xiàn)有屬性。

  • 刪除節(jié)點(diǎn)或關(guān)系的標(biāo)簽
  • 刪除節(jié)點(diǎn)或關(guān)系的屬性
#刪除屬性
MATCH (n:role {name:"fox"}) remove n.age return n

#創(chuàng)建節(jié)點(diǎn)
CREATE (m:role:person {name:"fox666"})  #m:role:person  可以給“fox666”既創(chuàng)建role節(jié)點(diǎn)又創(chuàng)建person節(jié)點(diǎn)
#刪除標(biāo)簽
match (m:role:person {name:"fox666"}) remove m:person return m

SET子句

有時,根據(jù)我們的客戶端要求,我們需要向現(xiàn)有節(jié)點(diǎn)或關(guān)系添加新屬性。要做到這一點(diǎn),Neo4j CQL提 供了一個SET子句。

  • 向現(xiàn)有節(jié)點(diǎn)或關(guān)系添加新屬性
  • 添加或更新屬性值
MATCH (n:role {name:"fox"}) set n.age=32 return n

ORDER BY排序

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

我們可以按升序或降序?qū)π羞M(jìn)行排序。默認(rèn)情況下,它按升序?qū)π羞M(jìn)行排序。 如果我們要按降序?qū)λ鼈?進(jìn)行排序,我們需要使用DESC子句。

MATCH (n:`西游`) RETURN id(n),n.name order by id(n) desc

UNION子句

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

  • UNION

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

    限制:

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

  • UNION ALL

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

    限制:

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

MATCH (n:role) RETURN n.name as name
UNION
MATCH (m:person) RETURN m.name as name

MATCH (n:role) RETURN n.name as name
UNION all
MATCH (m:person) RETURN m.name as name

LIMIT和SKIP子句

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

LIMIT返回前幾行,SKIP忽略前幾行。

# 前兩行
MATCH (n:`西游`) RETURN n LIMIT 2
# 忽略前兩行
MATCH (n:person) RETURN n SKIP 2

NULL值

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

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

match (n:`西游`) where n.label is null return id(n),n.name,n.tail,n.label

IN操作符

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

match (n:`西游`) where n.name in['孫悟空','唐僧'] return id(n),n.name,n.tail,n.label

INDEX索引

Neo4j SQL支持節(jié)點(diǎn)或關(guān)系屬性上的索引,以提高應(yīng)用程序的性能。

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

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

Neo4J索引操作

  • Create Index 創(chuàng)建索引
  • Drop Index 丟棄索引
# 創(chuàng)建索引
create index on :`西游` (name)
# 刪除索引
drop index on :`西游` (name)

UNIQUE約束

在Neo4j數(shù)據(jù)庫中,CQL CREATE命令始終創(chuàng)建新的節(jié)點(diǎn)或關(guān)系,這意味著即使您使用相同的值,它也會 插入一個新行。 根據(jù)我們對某些節(jié)點(diǎn)或關(guān)系的應(yīng)用需求,我們必須避免這種重復(fù)。

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

UNIQUE約束的優(yōu)點(diǎn)

  • 避免重復(fù)記錄。 強(qiáng)
  • 制執(zhí)行數(shù)據(jù)完整性規(guī)則
#創(chuàng)建唯一約束
create constraint on (n:xiyou) assert n.name is unique
#刪除唯一約束
drop constraint on (n:xiyou) assert n.name is unique

DISTINCT

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

match (n:`西游`) return distinct(n.name)

3.3 常用函數(shù)

函數(shù) 用法
String 字符串 它們用于使用String字面量
Aggregation 聚合 它們用于對CQL查詢結(jié)果執(zhí)行一些聚合操作
Relationship 關(guān)系 他們用于獲取關(guān)系的細(xì)節(jié),如startnode,endnode等

字符串函數(shù)

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

功能 描述
UPPER 它用于將所有字母更改為大寫字母
LOWER 它用于將所有字母改為小寫字母
SUBSTRING 它用于獲取給定String的子字符串
REPLACE 它用于替換一個字符串的子字符串
MATCH (e) RETURN id(e),e.name,substring(e.name,0,2)

AGGREGATION聚合

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

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

聚集功能 描述
COUNT 它返回由MATCH命令返回的行數(shù)
MAX 它從MATCH命令返回的一組行返回最大值
MIN 它返回由MATCH命令返回的一組行的最小值
SUM 它返回由MATCH命令返回的所有行的求和值
AVG 它返回由MATCH命令返回的所有行的平均值
MATCH (e) RETURN count(e)

關(guān)系函數(shù)

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

功能 描述
STARTNODE 它用于知道關(guān)系的開始節(jié)點(diǎn)
ENDNODE 它用于知道關(guān)系的結(jié)束節(jié)點(diǎn)
ID 它用于知道關(guān)系的ID
TYPE 它用于知道字符串表示中的一個關(guān)系的TYPE
match (a)-[r] ->(b) return id(r),type(r)

3.4 neo4j-admin使用(數(shù)據(jù)庫備份、恢復(fù))

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

對Neo4j數(shù)據(jù)進(jìn)行備份、還原、遷移的操作時,要關(guān)閉neo4j

cd %NEO4J_HOME%/bin
#關(guān)閉neo4j
neo4j stop  #一定要先neo4j install -service,才可以執(zhí)行neo4j stop
#備份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump

數(shù)據(jù)庫恢復(fù)

還原、遷移之前 ,要關(guān)閉neo4j服務(wù)。

#數(shù)據(jù)導(dǎo)入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --
force
#重啟服務(wù)
neo4j start

4.案例

4.1創(chuàng)建股票知識圖譜

創(chuàng)建一個簡單的股票知識圖譜,包括:

創(chuàng)建節(jié)點(diǎn)和關(guān)系:

1,建立幾只股票的節(jié)點(diǎn)

create(n:stock{name:'招商銀行',code:'600036',launchDate:date("2002-04-09")}),(:stock{name:'中科創(chuàng)達(dá)',code:'300496',launchDate:date("2015-12-10")}),(:stock{name:'華工科技',code:'000988',launchDate:date("2000-06-08")}),(:stock{name:'國信證券',code:'002736',launchDate:date("2014-12-29")})

2,建立上海證券交易所和深圳證券交易所兩個節(jié)點(diǎn)

create(n:SecuritiesExchange{name:'上海證券交易所'}),(:SecuritiesExchange{name:'深圳證券交易所'}) return n;

3,建立省市地方名稱的節(jié)點(diǎn)

create(n:Province{name:'湖北'}),(:Province{name:'北京'}),(:Province{name:'廣東'}) return n;

4,建立股票和證券交易所關(guān)系

#建立'國信證券'和'上海證券交易所'的關(guān)系
match(a:stock),(b:SecuritiesExchange) where a.name='國信證券' and b.name='上海證券交易所' create (a)-[r:Exchange]->(b) return r;
#建立'招商銀行'和'上海證券交易所'的關(guān)系
match(a:stock),(b:SecuritiesExchange) where a.name='招商銀行' and b.name='上海證券交易所' create (a)-[r:Exchange]->(b) return r;
#建立'華工科技'和'深圳證券交易所'的關(guān)系
match(a:stock),(b:SecuritiesExchange) where a.name='華工科技' and b.name='深圳證券交易所' create (a)-[r:Exchange]->(b) 
#建立'華工科技'和'深圳證券交易所'的關(guān)系
match(a:stock),(b:SecuritiesExchange) where a.name='華工科技' and b.name='深圳證券交易所' create (a)-[r:Exchange]->(b) 

5,建立股票和省市名稱關(guān)系

#建立'華工科技'和'北京'的關(guān)系
match(a:stock),(b:Province) where a.name='華工科技' and b.name='北京' create (a)-[r:Area]->(b)
#建立'中科創(chuàng)達(dá)'和'北京'的關(guān)系
match(a:stock),(b:Province) where a.name='中科創(chuàng)達(dá)' and b.name='北京' create (a)-[r:Area]->(b)
#建立'招商銀行'和'湖北'的關(guān)系
match(a:stock),(b:Province) where a.name='招商銀行' and b.name='湖北' create (a)-[r:Area]->(b)
#建立'國信證券'和'廣東'的關(guān)系
match(a:stock),(b:Province) where a.name='國信證券' and b.name='廣東' create (a)-[r:Area]->(b)
#建立'中科創(chuàng)達(dá)'和'國信證券'的關(guān)系
 create (n:stock{name:'中科創(chuàng)達(dá)'})-[r:同行]->(:stock{name:'國信證券'}) return r
#建立'華工科技'和'中科創(chuàng)達(dá)'為同行的關(guān)系
match(a:stock{name:'華工科技'}),(b:stock{name:'中科創(chuàng)達(dá)'}) create (a)-[r:`同行`{relation:'同行'}]->(b) return type(r)
#建立'華工科技'和'招商銀行'為同行的關(guān)系
match(a:stock{name:'華工科技'}),(b:stock{name:'招商銀行'}) create (a)-[r:同行]->(b) return type(r)

查詢節(jié)點(diǎn)和關(guān)系:

6,查詢某個股票的節(jié)點(diǎn)

#查詢'招商銀行'股票節(jié)點(diǎn)
match (a:stock) where a.name='招商銀行' return a;

7,查詢某個標(biāo)簽的所有節(jié)點(diǎn)

#查詢‘stock’標(biāo)簽的所有節(jié)點(diǎn)
match(a:stock) return a;

8.查詢兩個節(jié)點(diǎn)之間的關(guān)系

#查詢‘華工科技’和‘北京’之間的關(guān)系
match(:stock{name:'華工科技'})-[r]->(:Province{name:'北京'}) return type(r)

返回結(jié)果:type(r)  "Area"

9,通過函數(shù)type獲取關(guān)系的類型

match(:stock{name:'華工科技'})-[r]->() return type(r);
返回結(jié)果:type(r)  "Area" "Exchange"

刪除節(jié)點(diǎn)和關(guān)系
10,刪除股票的節(jié)點(diǎn)

#如果該節(jié)點(diǎn)存在關(guān)系,先刪關(guān)系,再刪節(jié)點(diǎn)。
match(a:stock) where a.name='中科創(chuàng)達(dá)' delete a

11,刪除某個標(biāo)簽的節(jié)點(diǎn)

#刪除‘stock’標(biāo)簽的節(jié)點(diǎn)
match(n:stock) delete n
#刪除所有標(biāo)簽節(jié)點(diǎn)
match(n) delete n

12,刪除兩個節(jié)點(diǎn)的關(guān)系

#刪除'中科創(chuàng)達(dá)'和'國信證券'之間的關(guān)系
match(:stock{name:'中科創(chuàng)達(dá)'})-[r]->(:stock{name:'國信證券'}) delete r

#刪除'中科創(chuàng)達(dá)'節(jié)點(diǎn)之間的關(guān)系
match(:stock{name:'中科創(chuàng)達(dá)'})-[r]->() delete r

13,刪除全部關(guān)系

#刪除'stock'標(biāo)簽的全部關(guān)系
match(:stock)-[r]->() delete r

更新圖形
set子句,用于對更新節(jié)點(diǎn)的標(biāo)簽和實(shí)體的屬性;remove子句,用于刪除實(shí)體的屬性和節(jié)點(diǎn)的標(biāo)簽;
14,增加節(jié)點(diǎn)屬性

#增加'湖北'節(jié)點(diǎn)的屬性
match(a:Province) where a.name='湖北' set a.abbreviation='HN' return a
match(a:Province) where a.name='湖北' set a.person='2000' return a

15,刪除節(jié)點(diǎn)屬性文章來源地址http://www.zghlxwxcb.cn/news/detail-819375.html

#刪除‘湖北’節(jié)點(diǎn)屬性
match(a:Province) where a.name='湖北' remove a.person 

4.2 利用CQL構(gòu)建明星關(guān)系圖譜

#導(dǎo)入明星數(shù)據(jù)
load csv from 'file:///明星1.csv' as line
create (:star {num:line[0],name:line[1]})
load csv from 'file:///明星關(guān)系數(shù)據(jù)1.csv' as line
create (:starRelation
{from:line[0],subject:line[1],to:line[2],object:line[3],relation:line[4]})
#查詢明星關(guān)系
match (n:star),(m:starRelation),(s:star) where n.name='劉燁' and m.subject='劉燁'
and s.name=m.object
return n.name,m.relation,s.name
# 創(chuàng)建關(guān)系 構(gòu)建明星關(guān)系圖譜
match (n:star),(m:starRelation),(s:star) where n.name='劉燁' and m.subject='劉燁'
and s.name=m.object
create (n)-[r:關(guān)系{relation:m.relation}]->(s)
return n.name,m.relation,s.name
#查看明星關(guān)系
MATCH p=(n:star{name:'劉燁'})-[r:`關(guān)系`]->() RETURN p


# 構(gòu)建明星全部關(guān)系圖譜
match (n:star1),(m:starRelation),(s:star1) where n.name=m.subject and s.name=m.object
create (n)-[r:明星關(guān)系{relation:m.relation}]->(s)
# return n.name,m.relation,s.name  (可以不寫也)

到了這里,關(guān)于圖數(shù)據(jù)庫Neo4j(最詳細(xì)教程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 圖形數(shù)據(jù)庫的實(shí)戰(zhàn)應(yīng)用:如何在 Neo4j 中有效管理復(fù)雜關(guān)系

    圖形數(shù)據(jù)庫的實(shí)戰(zhàn)應(yīng)用:如何在 Neo4j 中有效管理復(fù)雜關(guān)系

    關(guān)系數(shù)據(jù)庫管理系統(tǒng)( RDBMS ) 代表了最先進(jìn)的技術(shù),這在一定程度上要?dú)w功于其由周邊技術(shù)、工具和廣泛的專業(yè)技能組成的完善的生態(tài)系統(tǒng)。 在這個涵蓋信息技術(shù)(IT) 和運(yùn)營技術(shù)(OT) 的技術(shù)革命時代,人們普遍認(rèn)識到性能方面出現(xiàn)了重大挑戰(zhàn),特別是在NoSQL 解決方案優(yōu)于傳統(tǒng)方

    2024年02月03日
    瀏覽(20)
  • Neo4j:入門基礎(chǔ)(二)~ 數(shù)據(jù)導(dǎo)入Neo4J
                    
            
RDF導(dǎo)入neo4j數(shù)據(jù)庫

    Neo4j:入門基礎(chǔ)(二)~ 數(shù)據(jù)導(dǎo)入Neo4J RDF導(dǎo)入neo4j數(shù)據(jù)庫

    neo4j導(dǎo)入數(shù)據(jù)的方式有以下幾種: Cypher create 語句,為每一條數(shù)據(jù)寫一個create Cypher load csv 語句,將數(shù)據(jù)轉(zhuǎn)成CSV格式,通過LOAD CSV讀取數(shù)據(jù)。 neo4j-admin import導(dǎo)入 官方提供的Java API - BatchInserter 大牛編寫的 batch-import 工具 neo4j-apoc load.csv + apoc.load.relationship 針對實(shí)際業(yè)務(wù)場景,定制

    2023年04月24日
    瀏覽(33)
  • Neo4j | 保姆級教學(xué)之如何清空neo4j數(shù)據(jù)庫

    要清空neo4j數(shù)據(jù)庫,需要進(jìn)行以下操作: 停止Neo4j服務(wù)器,關(guān)閉Neo4j的所有連接。 找到 Neo4j 數(shù)據(jù)庫存儲的目錄,通常是 data/databases/ 。 刪除該目錄中的所有文件和子目錄。 請注意,這將不可逆地刪除數(shù)據(jù)庫的所有內(nèi)容,包括節(jié)點(diǎn)、關(guān)系和屬性等數(shù)據(jù)。在執(zhí)行這個操作之前,請

    2024年02月06日
    瀏覽(23)
  • Neo4j數(shù)據(jù)庫刪除數(shù)據(jù)

    我們使用Neo4j圖數(shù)據(jù)庫進(jìn)行寫入數(shù)據(jù)操作之后,免不了要刪除數(shù)據(jù)的。 但是Neo4j的控制臺沒有提供快捷的刪除按鈕,所以我們還是需要通過命令來操作。 如果數(shù)據(jù)庫中的數(shù)據(jù)量并不大,節(jié)點(diǎn)數(shù)相對較少,我們可以通過命令行直接刪除節(jié)點(diǎn)。 此類操作起到清空數(shù)據(jù)庫的效果,但

    2023年04月09日
    瀏覽(22)
  • Neo4j 圖形數(shù)據(jù)庫

    Neo4j 圖形數(shù)據(jù)庫

    目錄 Neo4j?基礎(chǔ) 什么是Neo4j Neo4j?模塊構(gòu)建 Neo4j的主要應(yīng)用場景 Neo4j?環(huán)境搭建 Docker 安裝Neo4j Neo4j數(shù)據(jù)瀏覽器 ?Neo4j CQL CQL簡介 Neo4j CQL高級 CQL?函數(shù) CQL多深度關(guān)系節(jié)點(diǎn) 事務(wù) 索引 約束 Neo4j之Admin管理員操作 Neo4j -?數(shù)據(jù)庫備份和恢復(fù) 調(diào)優(yōu)思路 ?Neo4j?程序訪問 SpringBoot?整合Neo4j

    2024年02月10日
    瀏覽(25)
  • neo4j清空數(shù)據(jù)庫

    清空所有Person、 Movie節(jié)點(diǎn)及其所有關(guān)系 查詢?nèi)我鈹?shù)據(jù) ?如果沒有, 就說明已經(jīng)刪除成功了 這段代碼是用Cypher查詢語言編寫的,用于清空所有的Person節(jié)點(diǎn)、Movie節(jié)點(diǎn)以及它們之間的所有關(guān)系。讓我們逐步解釋代碼的每個部分: 這部分代碼使用MATCH語句來查找圖數(shù)據(jù)庫中的所有

    2024年02月14日
    瀏覽(19)
  • 圖數(shù)據(jù)庫_Neo4j的使用場景_以及Windows版Neo4j Community Server安裝_欺詐檢測_推薦_知識圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0003

    圖數(shù)據(jù)庫_Neo4j的使用場景_以及Windows版Neo4j Community Server安裝_欺詐檢測_推薦_知識圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0003

    可以看到使用場景,比如欺詐檢測, 要建立圖譜,才能進(jìn)行,欺詐人員檢測 ? 可以看到圖譜的各種應(yīng)用場景 然后推薦引擎也需要,可以看到 在金融,旅行,求職招聘,保健,服務(wù),媒體娛樂,都可以進(jìn)行推薦 ? 然后還有知識圖譜 身份訪問管理,這里,可以進(jìn)行安全管理,可以挖掘出潛在關(guān)系

    2024年02月12日
    瀏覽(29)
  • Neo4j數(shù)據(jù)庫使用相關(guān)

    Neo4j數(shù)據(jù)庫使用相關(guān)

    做知識圖譜相關(guān)項(xiàng)目,初步使用了neo4j數(shù)據(jù)庫,簡單記錄一下使用過程和踩坑備忘~ 操作系統(tǒng)Win10+Neo4j社區(qū)版(community,版本4.4.30) 目錄 一、安裝 1.1 安裝Java和Neo4j 1.2 環(huán)境變量設(shè)置 二、 Neo4j使用 2.1 安裝服務(wù) 2.2?數(shù)據(jù)庫使用 2.3 數(shù)據(jù)庫備份 ?Java下載鏈接:Java Downloads | Oracle

    2024年04月16日
    瀏覽(26)
  • 圖數(shù)據(jù)庫Neo4j簡介

    圖數(shù)據(jù)庫Neo4j簡介

    隨著社交、電商金融、零售、物聯(lián)網(wǎng)的快速發(fā)展,現(xiàn)實(shí)社會支起了一張張龐大二復(fù)雜的關(guān)系網(wǎng),傳統(tǒng)數(shù)據(jù)庫很難處理關(guān)系運(yùn)算,急需一種支持海量復(fù)雜數(shù)據(jù)關(guān)系運(yùn)算的數(shù)據(jù)庫,圖數(shù)據(jù)庫應(yīng)運(yùn)而生。 圖數(shù)據(jù)庫是基于圖論實(shí)現(xiàn)的一種Nosql數(shù)據(jù)庫,起數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)查詢方式都是以

    2024年02月22日
    瀏覽(37)
  • 圖數(shù)據(jù)庫Neo4j——SpringBoot使用Neo4j & 簡單增刪改查 & 復(fù)雜查詢初步

    圖數(shù)據(jù)庫Neo4j——SpringBoot使用Neo4j & 簡單增刪改查 & 復(fù)雜查詢初步

    圖形數(shù)據(jù)庫是專門用于存儲圖形數(shù)據(jù)的數(shù)據(jù)庫,它使用圖形模型來存儲數(shù)據(jù),并且支持復(fù)雜的圖形查詢。常見的圖形數(shù)據(jù)庫有Neo4j、OrientDB等。 Neo4j是用Java實(shí)現(xiàn)的開源NoSQL圖數(shù)據(jù)庫,本篇博客介紹如何在SpringBoot中使用Neo4j圖數(shù)據(jù)庫,如何進(jìn)行簡單的增刪改查,以及如何進(jìn)行復(fù)雜

    2024年02月06日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包