OrientDB圖遍歷主要通過兩種查詢語言實(shí)現(xiàn):TRAVERSE
和MATCH
。這兩種語言都提供了豐富的函數(shù)來滿足不同的遍歷需求。
TRAVERSE
主要用于對(duì)圖進(jìn)行遍歷,基于深度搜索算法或者廣度搜索算法對(duì)圖進(jìn)行有限制的盲目搜索。它返回一個(gè)符合遍歷條件的子圖。TRAVERSE
的語法格式如下:TRAVERSE [class.]field | * | any() | all()
FROM <target>
[MAXDEPTH <number>] | [WHILE <condition>]
[LIMIT <max-records>]
[STRATEGY <strategy>]
TRAVERSE
后可跟9個(gè)函數(shù),如out()
, in()
, both()
, oute()
, ine()
, bothE()
, outV()
, inV()
, bothV()
等,用于控制遍歷的方向和深度。MATCH
是OrientDB 2.2版本引入的以聲明方式的模式匹配語言,主要用于查詢圖。它和Neo4j的Cypher語言有點(diǎn)像,但目前MATCH
僅支持用于查詢。MATCH
的語法格式如下:MATCH { [class: <class>], [as: <alias>], [where: (<whereCondition>)] }
.<functionName>(){ [class: <classname>], [as: <alias>], [where: (<whereCondition>)], [while: (<whileCondition>)], [maxDepth: <number>], [depthAlias: <identifier>], [pathAlias: <identifier>], [optional: (true | false)] }*
RETURN <expression> [AS <alias>] [, [AS]]*
GROUP BY <expression> [, <expression>]*
ORDER BY <expression> [, <expression>]*
SKIP <number>
LIMIT <number>
MATCH
支持out()
, in()
, both()
, oute()
, ine()
, bothE()
, outV()
, inV()
, bothV()
等函數(shù),用于定義連接兩個(gè)節(jié)點(diǎn)的圖函數(shù)。TRAVERSE out('EdgeClass') FROM (SELECT * FROM Profiles WHERE id = 1)
LIMIT 8
MATCH { [class: Profiles], [as: p], [where: (id = 1)] }
.-outE('EdgeClass')-> { [class: Profiles], [as: p2], [where: (id = 2)] }
RETURN p2.id, p2.name
MATCH
通常用于更復(fù)雜的查詢,而TRAVERSE
適用于簡單的遍歷需求。WHERE
子句和LIMIT
來避免無限循環(huán)。通過上述教程和示例,您可以更好地理解和應(yīng)用OrientDB的圖遍歷功能。