OrientDB图遍历主要通过两种查询语言实现:TRAVERSE
和MATCH
。这两种语言都提供了丰富的函数来满足不同的遍历需求。
TRAVERSE语法格式
- 简介:
TRAVERSE
主要用于对图进行遍历,基于深度搜索算法或者广度搜索算法对图进行有限制的盲目搜索。它返回一个符合遍历条件的子图。 - 语法格式:
TRAVERSE
的语法格式如下:
TRAVERSE [class.]field | * | any() | all() FROM[MAXDEPTH ] | [WHILE ] [LIMIT ] [STRATEGY ]
- 主要函数:
TRAVERSE
后可跟9个函数,如out()
,in()
,both()
,oute()
,ine()
,bothE()
,outV()
,inV()
,bothV()
等,用于控制遍历的方向和深度。
MATCH语法格式
- 简介:
MATCH
是OrientDB 2.2版本引入的以声明方式的模式匹配语言,主要用于查询图。它和Neo4j的Cypher语言有点像,但目前MATCH
仅支持用于查询。 - 语法格式:
MATCH
的语法格式如下:
MATCH { [class:], [as: ], [where: ( )] } . (){ [class: ], [as: ], [where: ( )], [while: ( )], [maxDepth: ], [depthAlias: ], [pathAlias: ], [optional: (true | false)] }* RETURN [AS ] [, [AS]]* GROUP BY [, ]* ORDER BY [, ]* SKIP LIMIT
- 主要函数:
MATCH
支持out()
,in()
,both()
,oute()
,ine()
,bothE()
,outV()
,inV()
,bothV()
等函数,用于定义连接两个节点的图函数。
示例代码
- TRAVERSE示例:
TRAVERSE out('EdgeClass') FROM (SELECT * FROM Profiles WHERE id = 1) LIMIT 8
- MATCH示例:
MATCH { [class: Profiles], [as: p], [where: (id = 1)] } .-outE('EdgeClass')-> { [class: Profiles], [as: p2], [where: (id = 2)] } RETURN p2.id, p2.name
最佳实践
- 使用优先级:
MATCH
通常用于更复杂的查询,而TRAVERSE
适用于简单的遍历需求。 - 查询环:使用
WHERE
子句和LIMIT
来避免无限循环。 - 使用场景:根据是否需要返回路径信息、是否需要过滤结果等选择合适的查询语言。
通过上述教程和示例,您可以更好地理解和应用OrientDB的图遍历功能。