工商注冊網(wǎng)寧波seo入門教程
Nebula基礎(chǔ)的查詢操作介紹
這里只是對Nebula基礎(chǔ)查詢進行介紹,其目的是為了讓未接觸過Nebula的同學(xué)最短時間了解其語句。更詳細更準確的內(nèi)可以查看官方文檔。 docs.nebula-graph
關(guān)于查詢這里并沒有使用官方例子數(shù)據(jù),而是自己實際嘗試了文檔中的語句。
其他內(nèi)容
Nebula基礎(chǔ)的操作介紹
數(shù)據(jù)準備
創(chuàng)建標簽
CREATE TAG Person(name string, age int, type string);
CREATE TAG Employee(workingAge int);
創(chuàng)建邊類型
CREATE EDGE FRIEND(year int);
CREATE EDGE SUBORDINATE();
創(chuàng)建帶標簽的點
INSERT VERTEX Person(name, age, type) VALUES
"5":("小明", 40, "領(lǐng)導(dǎo)"),
"17":("小靜", 45, "領(lǐng)導(dǎo)"),
... (省略其他插入語句)
插入SUBORDINATE邊類型
INSERT EDGE SUBORDINATE() VALUES "7"->"1"@0:(), "7"->"3"@0:(), "7"->"4"@0:(), "7"->"6"@0:(), "7"->"8"@0:() ;
... (省略其他插入語句)
插入FRIEND邊類型
INSERT EDGE FRIEND(year) VALUES
"1"->"2"@0:( 5),
"2"->"3"@0:( 3),
"3"->"4"@0:( 3),
... (省略其他插入語句)
創(chuàng)建索引
CREATE TAG INDEX Person_index on Person();
CREATE TAG INDEX Employee_index on Employee();CREATE TAG INDEX Person_index_1 on Person(name(10), age, type(10));
CREATE TAG INDEX Employee_index_1 on Employee(workingAge);CREATE EDGE INDEX FRIEND_index on FRIEND(year);
CREATE EDGE INDEX SUBORDINATE_index on SUBORDINATE();
重建索引數(shù)據(jù)
REBUILD TAG INDEX Person_index,Employee_index;REBUILD TAG INDEX Employee_index_1,Person_index_1;REBUILD EDGE INDEX FRIEND_index,SUBORDINATE_index;
確定重建狀態(tài)
SHOW TAG INDEX STATUS;
一些變量說明
下面查詢中一些變量的說明
起始點
$^.<tag_name>.<prop_name>
$^
: 表示起始點。<tag_name>
: 表示點的 Tag 名稱。<prop_name>
: 表示 Tag 內(nèi)的屬性名稱。
目的點
$$.<tag_name>.<prop_name>
$$
: 表示目的點。<tag_name>
: 表示點的 Tag 名稱。<prop_name>
: 表示 Tag 內(nèi)的屬性名稱。
查詢語句 - MATCH
MATCH語句提供基于模式(Pattern)匹配的搜索功能。在進行查詢時,MATCH語句使用的路徑類型是trail,這意味著點可以重復(fù)出現(xiàn),但邊不能重復(fù)。
需要注意,我這里使用的是3.0.0版本。在EDGE和TAG操作中需要創(chuàng)建索引
匹配點
匹配所有點
# 在數(shù)據(jù)庫中匹配所有節(jié)點,然后返回前 5 個節(jié)點
MATCH (v) RETURN v LIMIT 5;# 返回結(jié)果
("1" :Person{age: 30, name: "張三", type: "員工"})
("13" :Person{age: 28, name: "小麗", type: "員工"})
("16" :Person{age: 22, name: "小敏", type: "員工"})
("20" :Person{age: 22, name: "小明", type: "員工"})
("8" :Person{age: 33, name: "小花", type: "員工"})
匹配 Tag
匹配單個標簽
# 在數(shù)據(jù)庫中匹配具有 "Person" 標簽的節(jié)點
MATCH (v:Person) RETURN v LIMIT 3;# 返回結(jié)果
("1" :Person{age: 30, name: "張三", type: "員工"})
("13" :Person{age: 28, name: "小麗", type: "員工"})
("8" :Person{age: 33, name: "小花", type: "員工"})
匹配多個標簽
# 在數(shù)據(jù)庫中匹配同時具有 "Person" 和 "Employee" 標簽的節(jié)點
MATCH (v:Person:Employee) RETURN v LIMIT 2;# 返回結(jié)果
("2" :Employee{workingAge: 4} :Person{age: 35, name: "李四", type: "領(lǐng)導(dǎo)"})
("7" :Employee{workingAge: 2} :Person{age: 45, name: "小李", type: "領(lǐng)導(dǎo)"})
匹配點的屬性
需要注意:
- NebulaGraph 3.0.0 之前,匹配 Tag 的前提是 Tag 本身有索引或者 Tag 的某個屬性有索引。
- NebulaGraph 3.0.0 開始,匹配 Tag 可以不創(chuàng)建索引,但需要使用 LIMIT 限制輸出結(jié)果數(shù)量。
- NebulaGraph 3.5.0 開始,MATCH 語句支持全表掃描,無需為 Tag 或 Tag 的某個屬性創(chuàng)建索引,或者使用 LIMIT 限制輸出結(jié)果數(shù)量,即可執(zhí)行 MATCH 語句。
MATCH 匹配標簽屬性
# 在數(shù)據(jù)庫中匹配具有 "Person" 標簽且屬性 "age" 為 35 的節(jié)點
MATCH (v:Person{age: 35}) RETURN v LIMIT 2;# 返回結(jié)果
("12" :Person{age: 35, name: "小楊", type: "領(lǐng)導(dǎo)"})
("2" :Employee{workingAge: 4} :Person{age: 35, name: "李四", type: "領(lǐng)導(dǎo)"})
WHERE 匹配標簽屬性
#
MATCH (v:Person) WHERE v.Person.age == 35 RETURN v LIMIT 2;# 返回結(jié)果
("2" :Employee{workingAge: 4} :Person{age: 35, name: "李四", type: "領(lǐng)導(dǎo)"})
("12" :Person{age: 35, name: "小楊", type: "領(lǐng)導(dǎo)"})
匹配點 ID
用戶可以使用點 ID 去匹配點。id()函數(shù)可以檢索點的 ID。
#
MATCH (v) WHERE id(v) == '1' RETURN v;# 返回結(jié)果
("1" :Person{age: 30, name: "張三", type: "員工"})
匹配多個ID
注意:你必須先指定 Tag/EdgeType,或者用 LIMIT 子句限制返回數(shù)量,才能獲取對應(yīng)類型的所有的點和邊。
#
MATCH (v:Person) WHERE id(v) IN {'1','2'} RETURN v;# 返回結(jié)果
("2" :Employee{workingAge: 4} :Person{age: 35, name: "李四", type: "領(lǐng)導(dǎo)"})
("1" :Person{age: 30, name: "張三", type: "員工"})
返回屬性
#
MATCH (v:Person) WHERE id(v) IN {'1','2'} RETURN v.Person.name AS name;# 返回結(jié)果
李四
張三
匹配連接的點
使用–符號表示兩個方向的邊
#
MATCH (v:Person{name:"小明"})--(v2:Person) RETURN v2.Person.name AS Name;# 返回結(jié)果
小芳
李四
小靜
趙六
小紅
在–符號上增加<或>符號指定邊的方向
#
MATCH (v:Person{name:"小明"})-->(v2:Person) RETURN v2.Person.name AS Name;# 返回結(jié)果
李四
小紅
小靜
增加更多點和邊
#
MATCH (v:Person{name:"小明"})-->(v2:Person)-->(v3) RETURN v3.player.name AS Name;# 如果不需要引用點,可以省略括號中表示點的變量。
MATCH (v:Person{name:"小明"})-->()-->(v3) RETURN v3.player.name AS Name;# 返回結(jié)果
小芳
小李
小李
王五
王五
小楊
匹配路徑
查詢點的邊
#
MATCH p=(v:Person{name:"小明"})-->(v2) RETURN p;# 返回結(jié)果
<("5" :Employee{workingAge: 10} :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"})-[:SUBORDINATE@0 {}]->("2" :Employee{workingAge: 4} :Person{age: 35, name: "李四", type: "領(lǐng)導(dǎo)"})>
<("5" :Employee{workingAge: 10} :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"})-[:FRIEND@0 {year: 6}]->("6" :Person{age: 22, name: "小紅", type: "員工"})>
<("5" :Employee{workingAge: 10} :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"})-[:SUBORDINATE@0 {}]->("17" :Employee{workingAge: 8} :Person{age: 45, name: "小靜", type: "領(lǐng)導(dǎo)"})>
查詢存在的邊
#
MATCH ()<-[e]-() RETURN e LIMIT 3;# 返回結(jié)果
[:FRIEND "7"->"8" @0 {year: 2}]
[:SUBORDINATE "7"->"8" @0 {}]
[:SUBORDINATE "7"->"1" @0 {}]
根據(jù)類型查詢存在的邊
#
MATCH ()-[e:SUBORDINATE]->() RETURN e LIMIT 3;# 返回結(jié)果
[:SUBORDINATE "17"->"7" @0 {}]
[:SUBORDINATE "17"->"15" @0 {}]
[:SUBORDINATE "5"->"2" @0 {}]
根據(jù)邊的屬性查詢邊
#
MATCH (v)-[e:FRIEND{year:3}]->(v2) WHERE id(v) == "2" RETURN e;# 返回結(jié)果
[:FRIEND "2"->"3" @0 {year: 3}]
對點補充過濾
#
MATCH (v:Person{name:"李四"})-[e:FRIEND{year:3}]->(v2) RETURN e;# 返回結(jié)果
[:FRIEND "2"->"3" @0 {year: 3}]
匹配多個類型的邊
#
MATCH (v:Person{name:"小明"})-[e:SUBORDINATE|FRIEND]->(v2) RETURN e;# 返回結(jié)果
[:FRIEND "5"->"6" @0 {year: 6}]
[:SUBORDINATE "5"->"17" @0 {}]
[:SUBORDINATE "5"->"2" @0 {}]
匹配多條邊
用戶可以擴展模式,匹配路徑中的多條邊。
#
MATCH (v:Person{name:"小明"})-[]->(v2)<-[e:FRIEND]-(v3) RETURN v2, v3;
匹配定長路徑
使用<edge_type>*匹配定長路徑。hop必須是一個非負整數(shù)。
#
MATCH (v:Person{name:"小明"})-[e:FRIEND*3]->(v2) RETURN DISTINCT v2;# 返回結(jié)果
("8" :Person{age: 33, name: "小花", type: "員工"})
匹配變長路徑
用戶可以在模式中使用<edge_type>*[minHop…maxHop]匹配變長路徑。
minHop 可選項。表示路徑的最小長度。minHop必須是一個非負整數(shù),默認值為 1。
maxHop 可選項。表示路徑的最大長度。maxHop必須是一個非負整數(shù),默認值為無窮大。
# 在數(shù)據(jù)庫中匹配具有 "Person" 標簽且屬性 "name" 為 "小明" 的節(jié)點,以及從它們出發(fā)的類型為 "FRIEND" 的邊,跳過 3 到 5 次后到達的節(jié)點,然后返回這些節(jié)點。
MATCH (v:Person{name:"小明"})-[e:FRIEND*3..5]->(v2) RETURN v2;
返回結(jié)果
("9" :Person{age: 28, name: "大海", type: "員工"})
("10" :Person{age: 22, name: "小雨", type: "員工"})
("8" :Person{age: 33, name: "小花", type: "員工"})
("10" :Person{age: 22, name: "小雨", type: "員工"})
("9" :Person{age: 28, name: "大海", type: "員工"})
("10" :Person{age: 22, name: "小雨", type: "員工"})
用戶可以使用DISTINCT關(guān)鍵字聚合重復(fù)結(jié)果。
# 從名為 "小明" 的 "Person" 類型節(jié)點出發(fā),通過不定長度的 "FRIEND" 邊(跳數(shù)在 3 到 5 范圍內(nèi)),到達的節(jié)點為 "v2",返回不重復(fù)的 "v2" 節(jié)點及其出現(xiàn)的次數(shù)。
MATCH (v:Person{name:"小明"})-[e:FRIEND*3..5]->(v2) RETURN DISTINCT v2, COUNT(v2) AS count;
返回結(jié)果
V2 | count |
---|---|
(“8” :Person{age: 33, name: “小花”, type: “員工”}) | 1 |
(“9” :Person{age: 28, name: “大海”, type: “員工”}) | 2 |
(“10” :Person{age: 22, name: “小雨”, type: “員工”}) | 3 |
多個Edge type設(shè)置路徑
用戶可以指定多個 Edge type 的 hop、minHop和maxHop,這些配置對所有 Edge type 都生效。
# 從名為 "小明" 的 "Person" 類型節(jié)點出發(fā),通過不定長度的 "SUBORDINATE" 或 "FRIEND" 邊(跳數(shù)在 1 到 2 范圍內(nèi)),到達的節(jié)點為 "v2",返回不重復(fù)的 "v2" 節(jié)點及其出現(xiàn)的次數(shù)。
MATCH (v:Person{name:"小明"})-[e:SUBORDINATE|FRIEND*1..2]->(v2) RETURN DISTINCT v2, COUNT(v2) AS count;
返回結(jié)果
V2 | count |
---|---|
(“3” :Person{age: 28, name: “王五”, type: “員工”}) | 1 |
(“12” :Person{age: 35, name: “小楊”, type: “領(lǐng)導(dǎo)”}) | 1 |
(“6” :Person{age: 22, name: “小紅”, type: “員工”}) | 1 |
(“17” :Employee{workingAge: 8} :Person{age: 45, name: “小靜”, type: “領(lǐng)導(dǎo)”}) | 1 |
(“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) | 2 |
(“15” :Person{age: 40, name: “小芳”, type: “領(lǐng)導(dǎo)”}) | 1 |
(“2” :Employee{workingAge: 4} :Person{age: 35, name: “李四”, type: “領(lǐng)導(dǎo)”}) | 1 |
匹配多個模式
用戶可以用英文逗號(,)分隔多個模式。
# 匹配具有標簽 "Person" 且屬性 "type" 為 "領(lǐng)導(dǎo)" 的節(jié)點 "v1",以及具有標簽 "Employee" 且屬性 "workingAge" 為 2 的節(jié)點 "v2",然后返回這些節(jié)點。
MATCH (v1:Person{type:"領(lǐng)導(dǎo)"}), (v2:Employee{workingAge:2}) RETURN v1,v2;
返回結(jié)果
v1 | v2 |
---|---|
(“17” :Employee{workingAge: 8} :Person{age: 45, name: “小靜”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
(“12” :Person{age: 35, name: “小楊”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
(“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
(“15” :Person{age: 40, name: “小芳”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
(“2” :Employee{workingAge: 4} :Person{age: 35, name: “李四”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
(“5” :Employee{workingAge: 10} :Person{age: 40, name: “小明”, type: “領(lǐng)導(dǎo)”}) | (“7” :Employee{workingAge: 2} :Person{age: 45, name: “小李”, type: “領(lǐng)導(dǎo)”}) |
LOOKUP
- 檢索指定 Tag 的所有點 ID。
- 檢索指定 Edge type 的所有邊的起始點、目的點和 rank。
- 統(tǒng)計包含指定 Tag 的點或?qū)儆谥付?Edge type 的邊的數(shù)量。
- 根據(jù) WHERE 搜索特定數(shù)據(jù)。
# 語法
LOOKUP ON {<vertex_tag> | <edge_type>}
[WHERE <expression> [AND <expression> ...]]
YIELD <return_list> [AS <alias>]
[<clause>];
# 返回結(jié)果
<return_list><prop_name> [AS <col_alias>] [, <prop_name> [AS <prop_alias>] ...];
參數(shù)說明
參數(shù) | 說明 |
---|---|
WHERE | 指定遍歷的過濾條件,還可以結(jié)合布爾運算符 AND 和 OR 一起使用。詳情請參見 WHERE。 |
YIELD | 定義需要返回的輸出。詳情請參見 YIELD。 |
AS | 設(shè)置別名。 |
clause | 支持 ORDER BY、LIMIT 子句。 |
查詢點信息
于標簽(TAG)的屬性進行過濾
# 在 "Person" 類型節(jié)點中查找具有 "name" 屬性為 "張三" 的節(jié)點,并返回這些節(jié)點的 ID。
LOOKUP ON Person WHERE Person.name == "張三" YIELD id(vertex);
返回數(shù)據(jù)
id(VERTEX) |
---|
1 |
基于標簽(TAG)的多個進行過濾
# 在 "Person" 類型節(jié)點中查找具有 "type" 屬性為 "領(lǐng)導(dǎo)" 且 "age" 屬性為 35 或 28 的節(jié)點,并返回這些節(jié)點的 "name" 和 "age" 屬性。
LOOKUP ON Person WHERE Person.type == "領(lǐng)導(dǎo)" AND Person.age IN [35,28] YIELD properties(vertex).name, properties(vertex).age;
返回數(shù)據(jù)
properties(VERTEX).name | properties(VERTEX).age |
---|---|
小楊 | 35 |
李四 | 35 |
檢索邊
基于邊的條件進行過濾,并返回邊信息
# 查找具有 "year" 屬性為 3 的 "FRIEND" 類型邊,并返回這些邊。
LOOKUP ON FRIEND WHERE FRIEND.year == 3 YIELD edge AS e;
返回數(shù)據(jù)
e |
---|
[:FRIEND “2”->“3” @0 {year: 3}] |
[:FRIEND “3”->“4” @0 {year: 3}] |
基于邊的條件進行過濾,并返回邊信息的屬性
# 查找具有 "year" 屬性為 3 的 "FRIEND" 類型邊,并返回這些邊的 "year" 屬性。
LOOKUP ON FRIEND WHERE FRIEND.year == 3 YIELD properties(edge).year;
返回數(shù)據(jù)
properties(EDGE).year |
---|
3 |
3 |
查詢包含某種邊的點信息
# 查找所有 "Person" 類型節(jié)點,并返回這些節(jié)點的 ID,然后限制結(jié)果返回前 4 條。
LOOKUP ON Person YIELD id(vertex) | LIMIT 4;
返回數(shù)據(jù)
id(VERTEX) |
---|
12 |
17 |
5 |
3 |
統(tǒng)計點和邊的數(shù)量
# 查找所有 "Person" 類型節(jié)點,返回這些節(jié)點的 ID,并計算節(jié)點數(shù)目。
LOOKUP ON Person YIELD id(vertex)| YIELD COUNT(*) AS Person_Number;
返回數(shù)據(jù)
Person_Number |
---|
20 |
# 查找所有 "FRIEND" 類型邊,返回這些邊,并計算邊的數(shù)目。
LOOKUP ON FRIEND YIELD edge AS e| YIELD COUNT(*) AS Follow_Number;
返回數(shù)據(jù)
Follow_Number |
---|
11 |
GO
# 語法
GO [[<M> TO] <N> STEPS] FROM <vertex_list>
OVER <edge_type_list> [{REVERSELY | BIDIRECT}]
[WHERE <conditions>]
YIELD [DISTINCT] <return_list>
[{SAMPLE <sample_list> | <limit_by_list_clause>}]
[| GROUP BY {<col_name> | <expression> | <position>} YIELD <col_name>]
[| ORDER BY <expression> [{ASC | DESC}]]
[| LIMIT [<offset>,] <number_rows>];
# 結(jié)果
<vertex_list> ::=<vid> [, <vid> ...]<edge_type_list> ::=<edge_type> [, <edge_type> ...]| *<return_list> ::=<col_name> [AS <col_alias>] [, <col_name> [AS <col_alias>] ...]
參數(shù)說明
參數(shù) | 說明 |
---|---|
<N> STEPS | 指定跳數(shù)。如果沒有指定跳數(shù),默認值 N 為 1。 |
M TO N STEPS | 遍歷 M ~N 跳的邊。如果 M 為 0,輸出結(jié)果和 M 為 1 相同。 |
<vertex_list> | 用逗號分隔的點 ID 列表,或特殊的引用符 $-.id 。 |
<edge_type_list> | 遍歷的 Edge type 列表。 |
REVERSELY | BIDIRECT | 默認情況下檢索的是 <vertex_list> 的出邊(正向),REVERSELY 表示反向,即檢索入邊;BIDIRECT 為雙向,即檢索正向和反向,通過返回 <edge_type>._type 字段判斷方向,其正數(shù)為正向,負數(shù)為反向。 |
WHERE <conditions> | 指定遍歷的過濾條件。用戶可以在起始點、目的點和邊使用 WHERE 子句,還可以結(jié)合 AND 、OR 、NOT 、XOR 一起使用。 |
YIELD [DISTINCT] <return_list> | 定義需要返回的輸出。當前支持 src(edge) 、dst(edge) 、type(edge) 等。 |
SAMPLE <sample_list> | 用于在結(jié)果集中取樣。 |
<limit_by_list_clause> | 用于在遍歷過程中逐步限制輸出數(shù)量。 |
GROUP BY | 根據(jù)指定屬性的值將輸出分組。 |
ORDER BY | 指定輸出結(jié)果的排序規(guī)則。 |
LIMIT [<offset>,] <number_rows> | 限制輸出結(jié)果的行數(shù)。詳情參見 LIMIT 。 |
匹配邊
基于 ID 獲取邊信息
# 從節(jié)點 ID 為 "7" 出發(fā),經(jīng)過 "FRIEND" 類型邊,返回目標節(jié)點。
GO FROM "7" OVER FRIEND YIELD dst(edge);
輸出結(jié)果
dst(EDGE) |
---|
10 |
8 |
9 |
基于 ID 獲取邊信息和距離(2 步)獲取邊信息
# 從節(jié)點 ID 為 "7" 出發(fā),經(jīng)過 2 步的 "FRIEND" 類型邊,返回目標節(jié)點。
GO 2 STEPS FROM "7" OVER FRIEND YIELD dst(edge);
輸出結(jié)果
dst(EDGE) |
---|
10 |
9 |
結(jié)果去重
# 從節(jié)點 ID 為 "5" 和 "7" 出發(fā),經(jīng)過 "FRIEND" 類型邊,返回不重復(fù)的起始節(jié)點的 "name" 屬性。
GO FROM "5", "7" OVER FRIEND YIELD DISTINCT properties($^).name AS start_name;
輸出結(jié)果
start_name |
---|
小明 |
小李 |
點匹配
獲取開始和處理節(jié)點屬性
# 從節(jié)點 ID 為 "5" 和 "7" 出發(fā),經(jīng)過 "FRIEND" 類型邊,返回不重復(fù)的起始節(jié)點的 "name" 屬性和不重復(fù)的目標節(jié)點的 "name" 屬性。
GO FROM "5", "7" OVER FRIEND YIELD DISTINCT properties($^).name AS start_name, properties($$).name AS end_name;
輸出結(jié)果
start_name | end_name |
---|---|
小明 | 小紅 |
小李 | 小雨 |
小李 | 小花 |
小李 | 大海 |
結(jié)果分組
# 從節(jié)點 ID 為 "5" 和 "7" 出發(fā),經(jīng)過 "FRIEND" 類型邊,獲取邊的源節(jié)點、目標節(jié)點和目標節(jié)點的 "age" 屬性,然后按照源節(jié)點進行分組,返回源節(jié)點、目標節(jié)點集合和目標節(jié)點的 "age" 屬性集合。
GO FROM "5", "7" OVER FRIEND YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age | GROUP BY $-.src YIELD $-.src AS src, collect_set($-.dst) AS dst, collect($-.age) AS age;
輸出結(jié)果
src | dst | age |
---|---|---|
7 | {“9”, “10”, “8”} | [22, 33, 28] |
5 | {“6”} | [22] |
IS NOT EMPTY
# 從節(jié)點 ID 為 "5" 出發(fā),經(jīng)過 "SUBORDINATE" 類型邊,如果目標節(jié)點的 "name" 屬性不為空,返回目標節(jié)點的邊。
GO FROM "5" OVER SUBORDINATE WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);
輸出結(jié)果
dst(edge) |
---|
17 |
2 |
FETCH
FETCH 可以獲取指定點或邊的屬性值。
獲取點的屬性值
基于 ID 獲取點的 TAG 信息。
# 獲取節(jié)點 ID 為 "5" 的 "Person" 類型節(jié)點的屬性信息。
FETCH PROP ON Person "5" YIELD properties(vertex);
返回結(jié)果
| properties(VERTEX) |
|----------------------------------------------------|
| {age: 40, name: "小明", type: "領(lǐng)導(dǎo)"} |
基于 ID 獲取點的 TAG 信息的屬性。
# 獲取節(jié)點 ID 為 "5" 的 "Person" 類型節(jié)點的屬性信息,并將其 "name" 屬性命名為 "name"。
FETCH PROP ON Person "5" YIELD properties(vertex).name AS name;
返回結(jié)果
| name |
|------|
| 小明 |
基于多個 ID 獲取點的 TAG 信息,使用英文逗號分隔。
# 獲取節(jié)點 ID 分別為 "5", "6", "7" 的 "Person" 類型節(jié)點的屬性信息。
FETCH PROP ON Person "5", "6", "7" YIELD properties(vertex);
返回結(jié)果
| properties(VERTEX) |
|----------------------------------------------------|
| {age: 22, name: "小紅", type: "員工"} |
| {age: 40, name: "小明", type: "領(lǐng)導(dǎo)"} |
| {age: 45, name: "小李", type: "領(lǐng)導(dǎo)"} |
在 FETCH 語句中獲取多個 Tag 值,使用英文逗號分隔。
# 獲取具有 "Person" 或 "Employee" 標簽的節(jié)點中,節(jié)點 ID 為 "5" 的節(jié)點的屬性信息,并將其命名為 "v"。
FETCH PROP ON Person, Employee "5" YIELD vertex AS v;
返回結(jié)果
| v |
|--------------------------------------------------|
| ("5" :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"}) |
Tag過濾
查詢多個 ID 的多個 Tag 值。
# 獲取具有 "Person" 或 "Employee" 標簽的節(jié)點中,節(jié)點 ID 分別為 "5", "6" 的節(jié)點的屬性信息,并將其命名為 "v"。
FETCH PROP ON Person, Employee "5", "6" YIELD vertex AS v;
返回結(jié)果
| v |
|--------------------------------------------------|
| ("5" :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"}) |
| ("6" :Person{age: 22, name: "小紅", type: "員工"}) |
在 FETCH 語句中使用 * 獲取當前圖空間所有標簽里,點的屬性值。
# 獲取所有類型的節(jié)點中,節(jié)點 ID 分別為 "5", "6", "7" 的節(jié)點的屬性信息,并將其命名為 "v"。
FETCH PROP ON * "5", "6", "7" YIELD vertex AS v;
返回結(jié)果
| v |
|--------------------------------------------------|
| ("6" :Person{age: 22, name: "小紅", type: "員工"}) |
| ("5" :Person{age: 40, name: "小明", type: "領(lǐng)導(dǎo)"}) |
| ("7" :Person{age: 45, name: "小李", type: "領(lǐng)導(dǎo)"}) |
邊匹配
語法
FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]
YIELD <output>;
參數(shù)說明
參數(shù) | 說明 |
---|---|
edge_type | Edge type 名稱。 |
src_vid | 起始點 ID,表示邊的起點。 |
dst_vid | 目的點 ID,表示邊的終點。 |
rank | 邊的 rank??蛇x參數(shù),默認值為0。起始點、目的點、Edge type 和 rank 可以唯一確定一條邊。 |
YIELD | 定義需要返回的輸出。詳情請參見 YIELD。 |
獲取邊的屬性值
# 獲取從節(jié)點 ID 為 "7" 到節(jié)點 ID 為 "10" 的 "FRIEND" 類型邊的屬性信息。
FETCH PROP ON FRIEND "7" -> "10" YIELD properties(edge);
返回結(jié)果
| properties(EDGE) |
|-------------------|
| {year: 9} |
獲取點之間邊的屬性
# 獲取從節(jié)點 ID 為 "7" 到節(jié)點 ID 為 "10" 的 "FRIEND" 類型邊的 "year" 屬性。
FETCH PROP ON FRIEND "7" -> "10" YIELD properties(edge).year;
返回結(jié)果
| properties(EDGE).year |
|------------------------|
| 9 |
獲取多條邊的屬性值,模式之間用英文逗號(,)分隔。
# 獲取從節(jié)點 ID 為 "7" 到節(jié)點 ID 為 "8", "9", "10" 的 "FRIEND" 類型邊的屬性信息。
FETCH PROP ON FRIEND "7" -> "8","7" -> "9","7" -> "10" YIELD properties(edge);
返回結(jié)果
| properties(EDGE) |
|-------------------|
| properties(EDGE) |
| {year: 2} |
| {year: 8} |
| {year: 9} |
基于 rank 獲取屬性值,
如果有多條邊,起始點、目的點和 Edge type 都相同,可以通過指定 rank 獲取正確的邊屬性值。
# 獲取從節(jié)點 ID 為 "7" 到節(jié)點 ID 為 "8" 的 "FRIEND" 類型邊的屬性信息,并將其命名為 "e"。
FETCH PROP ON FRIEND "7" -> "8"@0 YIELD edge AS e;
返回結(jié)果
| e |
|-------------------------------------------|
| [:FRIEND "7"->"8" @0 {year: 2}] |
查詢從某個點開始的邊的信息
# 從節(jié)點 ID 為 "7" 出發(fā),通過 "FRIEND" 類型邊的 "src" 和 "dst" 屬性,獲取對應(yīng)的邊
GO FROM "7" OVER FRIEND YIELD src(edge) AS s, dst(edge) AS d | FETCH PROP ON FRIEND $-.s -> $-.d YIELD properties(edge);
返回結(jié)果
properties(EDGE) |
---|
{year: 9} |
{year: 2} |
{year: 8} |
SHOW
顯示相關(guān)源數(shù)據(jù)信息
命令 | 說明 | 示例 |
---|---|---|
SHOW CHARSET | 語句顯示當前的字符集 | SHOW CHARSET |
SHOW COLLATION | 語句顯示當前的排序規(guī)則 | SHOW COLLATION |
SHOW CREATE SPACE | 顯示指定圖空間的創(chuàng)建語句 | SHOW CREATE SPACE <space_name> |
SHOW CREATE TAG/EDGE | 顯示指定 Tag 的基本信息 | SHOW CREATE {TAG <tag_name> |
SHOW HOSTS | 顯示集群信息,包括端口、狀態(tài)、leader、分片、版本等信息 | SHOW HOSTS [GRAPH |
SHOW INDEX STATUS | 顯示重建原生索引的作業(yè)狀態(tài) | SHOW {TAG |
SHOW INDEXES | 列出當前圖空間內(nèi)的所有 Tag 和 Edge type | SHOW {TAG |
SHOW PARTS | 顯示圖空間中指定分片或所有分片的信息 | SHOW PARTS [<part_id>] |
SHOW ROLES | 顯示分配給用戶的角色信息 | SHOW ROLES IN <space_name> |
SHOW SNAPSHOTS | 語句顯示所有快照信息 | SHOW SNAPSHOTS |
SHOW SPACES | 顯示現(xiàn)存的圖空間 | SHOW SPACES |
SHOW STATS | 顯示最近一次SUBMIT JOB STATS作業(yè)收集的圖空間統(tǒng)計信息 | SHOW STATS |
SHOW TAGS | 語句顯示當前圖空間內(nèi)的所有 Tag | SHOW TAGS |
SHOW EDGES | SHOW EDGES語句顯示當前圖空間內(nèi)的所有 Edge type | SHOW EDGES |
SHOW USERS | 顯示用戶信息 | SHOW USERS; |
SHOW SESSIONS | 用戶可以查詢會話信息 | SHOW [LOCAL] SESSIONS;SHOW SESSION <Session_Id> |
SHOW QUERIES | 查看當前 Session 中正在執(zhí)行的查詢請求信息 | SHOW [LOCAL] QUERIES |
SHOW META LEADER | 當前 Meta 集群的 leader 信息 | SHOW META LEADER |