初識Neo4j之Cypher(三)

目錄

一、介紹

二、語法

1、節點

2、關系

3、屬性

4、模式


一、介紹

????????Cypher 是 Neo4j 的聲明式查詢語言,兼容 GQL 標準。通過 openCypher 項目,Cypher 以開源方式提供。它類似于 SQL,但專為圖數據優化。

????????Cypher 直觀且接近自然語言,它采用類似 ASCII 藝術風格的語法,以可視化的方式來匹配模式和關系:

(:nodes)-[:ARE_CONNECTED_TO]->(:otherNodes)

圓括號用于表示 (:Nodes),而 -[:ARROWS]→ 用于表示 (:Nodes) 之間的關系。通過這種查詢語法,你可以對圖進行創建、讀取、更新或刪除(CRUD)操作。

二、語法

上圖表示:“Sally喜歡圖表。薩莉和約翰是朋友。薩莉為Neo4j工作。”

用Cypher寫同樣的信息:

(:Sally)-[:LIKES]->(:Graphs)
(:Sally)-[:IS_FRIENDS_WITH]->(:John)
(:Sally)-[:WORKS_FOR]->(:Neo4j)

1、節點

????????在屬性圖模型中,主要的組成部分是節點和關系。節點通常用來表示數據模型中的名詞或對象。在前面的例子中,Sally、John、Graphs 和 Neo4j 都是節點。在 Cypher 中,你可以用括號將節點括起來來表示它,例如 (node)。這些括號對應于可視化中構成節點的圓圈。

1)節點標簽

????????節點可以通過標簽進行分組,用戶能夠指定要查找或創建的特定類型的實體。標簽還幫助 Cypher 區分不同的實體,并優化查詢的執行效率。在這個例子中,Sally 和 John 都可以歸為 Person標簽,Graphs 可以加上 Technology標簽,Neo4j 則可以標記為 Company標簽。

????????在關系數據庫上下文中,這相當于告訴SQL在哪個表中查找特定的行。就像讓SQL從person表中查詢一個人的信息一樣,用戶也可以讓Cypher只檢查該信息的person標簽。(如果沒有為Cypher指定一個標簽來過濾不匹配的節點類別,查詢將檢查數據庫中的所有節點。在非常大的圖數據中,這可能會影響性能。)

2)節點變量
????????這里有必要將匹配到的數據實體綁定到變量,以便在后續的子句中引用它們。變量可以是單個字母或單詞,并且應當用小寫字母書寫。例如,如果你想把所有帶有 Person 標簽的節點綁定到變量 p,可以寫作 (p:Person)。

MATCH (p:Person)
RETURN p

2、關系

????????圖數據庫的一個優點是,你可以以關系的形式存儲元素(節點)之間是如何關聯的信息。在 Cypher 中,關系用方括號和一個箭頭來表示,連接兩個節點(例如 (Node1)-[]→(Node2))。在例子中,包含 :LIKES、:IS_FRIENDS_WITH 和 :WORKS_FOR 的線條,表示節點之間的關系。

????????關系類型前面一定要加上冒號。如果忘記加冒號,寫成 (:Person)-[LIKES]->(:Technology),那么 [LIKES] 就表示一個關系變量,而不是關系類型。

舉例:

  • (:Person)-[:LIKES]->(:Technology)
    這里?:LIKES?表示一種關系類型,查詢的是“喜歡”這種關系。

  • (:Person)-[LIKES]->(:Technology)
    這里?LIKES?沒有冒號,Cypher 會把它當作一個關系變量(可以起任意名字,不一定叫 LIKES),而不是“喜歡”這種類型的關系。因此,這種寫法只能匹配任何類型的關系,然后把這條關系賦值給變量 LIKES。

1)關系方向

????????關系總是具有方向性的,這通過箭頭來表示。

(1)從左到右:

(p:Person)-[:LIKES]->(t:Technology)

(2)從右到左:

(p:Person)<-[:LIKES]-(t:Technology)

(3)無方向的:

MATCH (p:Person)-[:LIKES]-(t:Technology)

2)無方向關系

????????無方向的關系并不意味著關系本身沒有方向,而是指在查詢時可以從任意方向遍歷。用戶不能創建沒有方向的關系,但在查詢時可以以無方向的方式進行。

????????在查詢中使用無方向關系特別適用于不知道關系方向的情況,因為如果用錯方向寫查詢,Cypher 是不會返回任何結果的。因此,Cypher 會檢索所有通過指定關系類型連接的節點,無論其方向如何。

注:因為查詢中的無向關系被遍歷兩次(每個方向一次),相同的模式將返回兩次。這可能會影響查詢的性能。

3)關系類型

????????關系類型對關系進行分類并賦予其含義,類似于標簽對節點的分組。按最佳實踐,關系類型通常使用動詞或其變體。關系類型描述了節點之間是如何關聯的。這樣,Cypher 查詢語言幾乎就像自然語言一樣,節點是主語和賓語(名詞),而關系(動詞)則是連接它們的動作詞。

在前面的例子中,關系類型有:

[:LIKES] —— 表示 Sally(一個節點)喜歡 graphs(另一個節點)。

[:IS_FRIENDS_WITH] —— 表示 Sally 和 John 是朋友。

[:WORKS_FOR] —— 表示 Sally 為 Neo4j 工作。

4)關系變量

????????變量在關系中可以像在節點中一樣使用。一旦你為關系指定了變量,就可以在后續的查詢中引用這個關系。

比如這個例子:MATCH (p:Person)-[r:LIKES]->(t:Technology) RETURN p, r, t

這個查詢為節點標簽(p 表示 Person,t 表示 Technology)以及關系類型(r 表示 :LIKES)都指定了變量。在 return 子句中,你就可以使用這些變量(即 p、r 和 t)來返回綁定的實體。

3、屬性

????????屬性值既可以添加到節點,也可以添加到關系上,并且可以是多種不同的數據類型。屬性用花括號{}括起來,鍵后面跟一個冒號,值用單引號或雙引號括起來:

CREATE (p:Person {name:'Sally'})-[r:IS_FRIENDS_WITH]->(p:Person {name:'John'})
RETURN p, r

4、模式

????????圖模式匹配是 Cypher 的核心。它是一種通過聲明式模式來在圖中導航、描述和提取數據的機制。(p:Person {name: "Sally"})-[r:LIKES]->(g:Technology {type: "Graphs"}) 這段 Cypher 代碼表示的是一個模式,但它并不是一個完整的查詢。它僅僅表達了這樣一個事實:有一個 name 屬性為 Sally 的 Person 節點,通過 LIKES 關系,連接到了一個 type 屬性為 Graphs 的 Technology 節點。要想基于這個模式執行實際操作,比如將它添加到圖中或從圖中查詢出來,你需要在數據庫中執行查詢。

可以用 CREATE 子句將這條信息寫入數據庫:

CREATE (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"})

當數據已經寫入數據庫后,可以用如下模式將其查詢出來:

MATCH (p:Person {name: "Sally"})-[r:LIKES]->(t:Technology {type: "Graphs"}) RETURN p, r, t

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90408.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

19-C#靜態方法與靜態類

C#靜態方法與靜態類 1.static-靜態方法animal.eat&#xff08;&#xff09;;//直接調用 public class animal {public static void eat()//定義靜態方法{messagebox.show("animal eat");} }2.static-靜態類animal.eat&#xff08;&#xff09;;//直接調用public stat…

基于YOLO的足球檢測Web應用:從訓練到部署的完整實戰

用Python和深度學習技術打造一個完整的足球檢測系統&#xff0c;支持圖片檢測、視頻分析和實時監控。本文帶你從零開始構建一個專業的Web應用。&#x1f3af; 項目背景 在體育賽事分析和足球訓練中&#xff0c;準確識別和定位足球是一個重要需求。本項目利用YOLO深度學習算法&a…

npm 切換 node 版本 和npm的源

在開發過程中&#xff0c;不同項目可能需要不同版本的 Node.js&#xff0c;同時 于由XX原因&#xff0c;我們需要切換npm的源。這時如果需要切換node版本或者npm的源&#xff0c;我們可以使用以下方法。 使用 nvm 切換 Node 版本 1、安裝 npm install nvm -g2、使用 # 列出所有…

Java學習第二十部分——EasyMock

目錄 一.概述 二.作用 三.工作原理 四.使用示例 五.主要特點 六.適用場景 七.其他模擬框架比較 八.idea簡單項目實戰 1.打開idea創建Java項目&#xff0c;注意構建系統選“Maven” 2.為pom.xml文件添加如下依賴&#xff0c;并重新加載Maven依賴&#xff0c;直至不報錯…

機器學習模型在C++平臺的部署

一、概述機器學習模型的訓練通常在Python環境下完成&#xff0c;而現實生產環境的復雜性和多樣性使得模型的部署成為一個值得關注的重點。不同應用場景下有不同適應的實現方式&#xff0c;這里主要介紹通過一種通用中間格式——ONNX&#xff08;Open Neural Network Exchange&a…

保姆級安裝 Ruby 環境下載及安裝教程, RubyInstaller下載及安裝教程

一、下載安裝 RubyInstaller 1.打開 RubyInstaller 官網&#xff1a;https://rubyinstaller.org/ 點擊跳轉, 官網界面如下圖&#xff1a; 點擊下載最新的 RubyDevkit 版本&#xff08;如 RubyDevkit 3.4.X (x64) &#xff09;。如下圖所示&#xff1a; 注意點&#xff1a;如果…

SQL 一鍵生成 Go Struct!支持字段注釋、類型映射、結構體命名規范

SQL 一鍵生成 Go Struct&#xff01;支持字段注釋、類型映射、結構體命名規范 在 Golang 開發中&#xff0c;尤其是操作數據庫時&#xff0c;我們經常會遇到這種場景&#xff1a; ? 拿到數據庫建表 SQL&#xff0c;卻要手動寫 Go struct? 字段幾十個、類型復雜&#xff0c;…

Web 前端框架選型:React、Vue 和 Angular 的對比與實踐

Web 前端框架選型&#xff1a;React、Vue 和 Angular 的對比與實踐 選擇前端框架就像選擇一個長期合作伙伴。錯誤的選擇可能會讓你的項目在未來幾年內背負沉重的技術債務&#xff0c;而正確的選擇則能讓開發效率飛速提升。 經過多年的項目實踐&#xff0c;我發現很多新人在框架…

C# 值拷貝、引用拷貝、淺拷貝、深拷貝

值拷貝定義&#xff1a;直接復制變量的值&#xff0c;適用于基本數據類型&#xff08;如int, float, char等&#xff09;。在 C# 中&#xff0c;值類型&#xff08;基本數據類型和結構體&#xff09;默認使用值拷貝。特點&#xff1a;創建原始值的完全獨立副本&#xff0c;修改…

深度學習圖像分類數據集—百種鳥類識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;525種鳥類識別分類 訓練數據集總共有84635張圖片&#xff0c;每個文件夾…

零基礎 “入坑” Java--- 八、類和對象(一)

文章目錄一、初識面向對象二、類的定義和使用1.認識類2.類的定義格式三、類的實例化四、this引用五、對象的構造及初始化1.有關初始化2.構造方法3.就地初始化一、初識面向對象 Java是一門純面向對象的語言&#xff08;OOP&#xff09;&#xff0c;在面向對象的世界里&#xff…

數字孿生技術引領UI前端設計新篇章:智能物聯網的深度集成

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生與物聯網的共生革命在智能設備爆發式增長的今天&#xff0c;傳統…

代碼審計-shiro漏洞分析

一、關于shiro介紹 簡單講&#xff0c;shiro是apache旗下的一個Java安全框架&#xff0c;輕量級簡單易上手&#xff0c;框架提供很多功能接口&#xff0c;常見的身份認證 、權限認證、會話管理、Remember 記住功能、加密等等。 二、漏洞分析 1.CVE-2019-12422-shiro550 漏洞原理…

EF提高性能(查詢禁用追蹤)(關閉延遲加載)

EF默認是支持延遲加載的&#xff0c;在加載一個表的數據時&#xff0c;會把關聯表的數據一并加載&#xff0c;這樣會影響性能。 一般建議關閉延遲加載可以提高EF加載的性能。還有其他方法提高性能&#xff08;查詢禁用追蹤&#xff09; 如果要實現延遲加載&#xff0c;必須滿足…

Leetcode+JAVA+貪心III

134.加油站在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升。你有一輛油箱容量無限的的汽車&#xff0c;從第 i 個加油站開往第 i1 個加油站需要消耗汽油 cost[i] 升。你從其中的一個加油站出發&#xff0c;開始時油箱為空。給定兩個整數數組 gas 和 …

Qt信號與槽機制及動態調用

Qt信號與槽機制及動態調用一、信號與槽1、Qt信號與槽機制概述2、信號與槽的基本使用3、信號與槽的特性4、使用Lambda表達式作為槽5、信號與槽的參數傳遞6、注意事項二、動態調用機制1、基本用法2、示例代碼3、帶參數的調用4、返回值處理5、信號與槽的動態連接6、動態方法調用7、…

K8s系列之:Kubernetes 的 OLM

K8s系列之:Kubernetes 的 OLM 什么是 Kubernetes 的 OLM什么是Kubernetes中的OperatorOLM 的功能OLM 的核心組件OLM優勢OLM 的工作原理OLM 與 OperatorHub 的關系OLM示例場景什么是CRDoperator 和 CRD的關系為什么需要 CRD 和 OperatorCRD定義資源類型DebeziumServer如何使用d…

前端-HTML-day2

目錄 1、無序列表 2、有序列表 3、定義列表 4、表格-基本使用 5、表格-結構標簽 6、表格-合并單元格 7、表單-input基本使用 8、表單-input占位文本 9、表單-單選框 10、表單-上傳多個文件 11、表單-多選框 12、表單-下拉菜單 13、表單-文本域 14、表單-label標簽…

兩種方式清除已經保存的git賬號密碼

方式一隨便選擇一個文件夾&#xff0c;然后鼠標右鍵-》TortoiseGit ->設置選擇已保存的數據-》認證數據-》清除-》點擊確定方式二 控制面板\用戶帳戶\憑據管理器-》windows憑據普通憑據-》找到git信息-》選擇刪除

Using Spring for Apache Pulsar:Message Production

1. Pulsar Template在Pulsar生產者端&#xff0c;Spring Boot自動配置提供了一個用于發布記錄的PulsarTemplate。該模板實現了一個名為PulsarOperations的接口&#xff0c;并提供了通過其合約發布記錄的方法。這些send API方法有兩類&#xff1a;send和sendAsync。send方法通過…