跳到主要内容

遍历查询 ​

TraversalQuery 用线性模式描述从起点节点沿边到目标节点的查询。

基本遍历 ​

java
TraversalQuery query = TraversalQuery
    .from(TraversalQuery.NodePattern.node("person", "Person"))
    .traverse(
        TraversalQuery.EdgePattern.edge("knows", "KNOWS", TraversalQuery.Direction.OUT),
        TraversalQuery.NodePattern.node("friend", "Person"))
    .select(TraversalQuery.Projection.entity("friend"))
    .build();

Direction 支持 OUT、IN 和 BOTH。每个 alias 必须唯一,节点和边 alias 不能重复。

多跳和变长路径 ​

java
TraversalQuery path = TraversalQuery
    .from(TraversalQuery.NodePattern.node("start", "Person"))
    .traverse(
        TraversalQuery.EdgePattern.edge("knows", "KNOWS", TraversalQuery.Direction.OUT)
            .hops(1, 3),
        TraversalQuery.NodePattern.node("end", "Person"))
    .select(TraversalQuery.Projection.path("route"))
    .build();

SDK 对 Portable variable-length traversal 设置最大跳数限制。后端允许更长路径时,也不能绕过公共 API 的 限制;需要专属语义时使用 Native Query 并自行设置安全上限。

投影 ​

支持:

  • entity:完整节点或边;
  • property:单个属性;
  • path:完整路径;
  • aggregate:聚合值。

排序属性在 Nebula 上必须出现在投影中,因为 nGQL 的 ORDER BY 需要使用返回列。

分页和去重 ​

TraversalQuery 可以配置 skip、limit 和 distinct。生产分页应配合稳定 orderBy,否则数据变化期间不同页可能 出现重复或遗漏。