您的位置:首页 > 新闻 > 会展 > 兰州网络推广昔年下拉博客_网页搜索青骄第二课堂_网络品牌营销_网络营销推广软件

兰州网络推广昔年下拉博客_网页搜索青骄第二课堂_网络品牌营销_网络营销推广软件

2024/12/27 19:53:22 来源:https://blog.csdn.net/Blue_Pepsi_Cola/article/details/144334086  浏览:    关键词:兰州网络推广昔年下拉博客_网页搜索青骄第二课堂_网络品牌营销_网络营销推广软件
兰州网络推广昔年下拉博客_网页搜索青骄第二课堂_网络品牌营销_网络营销推广软件

【NebulaGraph】官方查询语言nGQL教程1

  • 1. 课程信息
  • 2. 查找路径`FIND PATH`
    • 2.1 补充说明`FIND PATH`
    • 2.2 例子

1. 课程信息

课程地址: https://www.bilibili.com/video/BV1PT411P7w8/?spm_id_from=333.337.search-card.all.click&vd_source=240d9002f7c7e3da63cd9a975639409a

2. 查找路径FIND PATH

FIND PATH语句查找指定起始点和目的点之间的路径。
语法:

FIND { SHORTEST | SINGLE SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list>
OVER <edge_type_list> [REVERSELY | BIDIRECT] 
[<WHERE clause>] [UPTO <N> {STEP|STEPS}] 
YIELD path as <alias>
[| ORDER BY $-.path] [| LIMIT <M>];<vertex_id_list> ::=[vertex_id [, vertex_id] ...]
  • SHORTEST:查找所有最短路径。
  • SINGLE SHORTEST:查找所有最短路径,随机返回其中一条。
  • ALL:查找所有路径。
  • NOLOOP:查找非循环路径。
  • WITH PROP:展示点和边的属性。不添加本参数则隐藏属性。
  • <vertex_id_list>:点 ID 列表。多个点用英文逗号(,)分隔。支持 − 和 -和 var。
  • <edge_type_list>:Edge type 列表。多个 Edge type 用英文逗号(,)分隔。*表示所有 Edge type。
  • REVERSELY | BIDIRECT:REVERSELY表示反向,BIDIRECT表示双向。
  • <WHERE clause>:可以使用WHERE子句过滤边属性。
  • UPTO <N> {STEP|STEPS}:路径的最大跳数。默认值为5。
  • ORDER BY $-.path:将返回结果进行排序。排序规则参见 Path。
  • LIMIT <M>:指定返回的最大行数。

限制

  • 指定起始点和目的点的列表后,会返回起始点和目的点所有组合的路径。
  • 搜索所有路径时可能会出现循环。
  • 使用WHERE子句时只能过滤边属性,暂不支持过滤点属性,且不支持函数。
  • graphd 是单进程查询,会占用很多内存。

示例
返回的路径格式类似于

(<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id)
# 查找并返回 player102 到 team204 的最短路径。
nebula> FIND SHORTEST PATH FROM "player102" TO "team204" OVER * YIELD path AS p;
+--------------------------------------------+
| p                                          |
+--------------------------------------------+
| <("player102")-[:serve@0 {}]->("team204")> |
+--------------------------------------------+
# 查找并返回带属性值的 team204 到 player100 的最短反向路径。
nebula> FIND SHORTEST PATH WITH PROP FROM "team204" TO "player100" OVER * REVERSELY YIELD path AS p;
+--------------------------------------------------------------------------------------------------------------------------------------+
| p                                                                                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------------+
| <("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2016, start_year: 1997}]-("player100" :player{age: 42, name: "Tim Duncan"})> |
+--------------------------------------------------------------------------------------------------------------------------------------+
# 查找并返回起点为 player100,player130 而终点为 player132,player133 的 18 跳之内双向最短路径。
nebula> FIND SHORTEST PATH FROM "player100", "player130" TO "player132", "player133" OVER * BIDIRECT UPTO 18 STEPS YIELD path as p;
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| p                                                                                                                                                                                              |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <("player100")<-[:follow@0 {}]-("player144")<-[:follow@0 {}]-("player133")>                                                                                                                    |
| <("player100")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player138")-[:serve@0 {}]->("team225")<-[:serve@0 {}]-("player132")>                                                                |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player112")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player114")<-[:follow@0 {}]-("player133")>                                  |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player109")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player114")<-[:follow@0 {}]-("player133")>                                  |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player104")-[:serve@20182019 {}]->("team204")<-[:serve@0 {}]-("player114")<-[:follow@0 {}]-("player133")>                           |
| ...                                                                                                                                                                                            |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player112")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player138")-[:serve@0 {}]->("team225")<-[:serve@0 {}]-("player132")>        |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player109")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player138")-[:serve@0 {}]->("team225")<-[:serve@0 {}]-("player132")>        |
| ...                                                                                                                                                                                            |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
# 查找 player100 和 player130 分别与 player132 和 player133 之间跳数最长为 18 步的最短路径。
nebula> FIND SINGLE SHORTEST PATH FROM "player100", "player130" TO "player132", "player133" OVER * BIDIRECT UPTO 18 STEPS YIELD path as p;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| p                                                                                                                                                                                       |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <("player100")<-[:follow@0 {}]-("player144")<-[:follow@0 {}]-("player133")>                                                                                                             |
| <("player100")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player138")-[:serve@0 {}]->("team225")<-[:serve@0 {}]-("player132")>                                                         |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player112")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player114")<-[:follow@0 {}]-("player133")>                           |
| <("player130")-[:serve@0 {}]->("team219")<-[:serve@0 {}]-("player112")-[:serve@0 {}]->("team204")<-[:serve@0 {}]-("player138")-[:serve@0 {}]->("team225")<-[:serve@0 {}]-("player132")> |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
# 查找所有从 player100 到 team204,并且 degree 为空或者大于等于 0 的路径。
nebula> FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree is EMPTY or follow.degree >=0 YIELD path AS p;
+------------------------------------------------------------------------------+
| p                                                                            |
+------------------------------------------------------------------------------+
| <("player100")-[:serve@0 {}]->("team204")>                                   |
| <("player100")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")>     |
| <("player100")-[:follow@0 {}]->("player101")-[:serve@0 {}]->("team204")>     |
| ...                                                                          |
+------------------------------------------------------------------------------+
# 查找所有从 player100 到 team204 无环路径。
nebula> FIND NOLOOP PATH FROM "player100" TO "team204" OVER * YIELD path AS p;
+--------------------------------------------------------------------------------------------------------+
| p                                                                                                      |
+--------------------------------------------------------------------------------------------------------+
| <("player100")-[:serve@0 {}]->("team204")>                                                             |
| <("player100")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")>                               |
| <("player100")-[:follow@0 {}]->("player101")-[:serve@0 {}]->("team204")>                               |
| <("player100")-[:follow@0 {}]->("player101")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")> |
| <("player100")-[:follow@0 {}]->("player101")-[:follow@0 {}]->("player102")-[:serve@0 {}]->("team204")> |
| ...                                                                                                    |
+--------------------------------------------------------------------------------------------------------+

2.1 补充说明FIND PATH

语法的关键字解析

a. PATH 类型

  • SHORTEST: 查找所有的最短路径,可能返回多条路径(如果有多个最短路径长度相同的结果)。
  • SINGLE SHORTEST: 查找从起点到终点的单一最短路径,只返回一条。
  • ALL: 查找所有的路径,不限制长度和重复性。
  • NOLOOP: 查找所有的无环路径(路径中不能包含重复顶点)。

b. WITH PROP

  • 如果指定了 WITH PROP,路径中的每条边都会包含其属性信息。
  • 未指定时,只返回路径的顶点和边的 ID。

c. FROM 和 TO

  • FROM <vertex_id_list>:定义路径的起点,可以是一个或多个顶点 ID 的列表。
  • TO <vertex_id_list>: 定义路径的终点,同样可以是一个或多个顶点 ID 的列表。

d. OVER

  • 指定查找路径时使用的边类型,可以是单个边类型或多个边类型的列表。
  • 可选方向:
    • REVERSELY:沿边的反向查找。
    • BIDIRECT:沿边的正向和反向同时查找。

e. WHERE clause
用于对路径中使用的边或顶点添加条件过滤。例如:WHERE edge.weight > 5


f. UPTO

  • 指定查找路径的最大长度(步数)。
  • <N>:路径的最大步数。
  • STEP | STEPS:表示单位为图遍历步数。

g. YIELD

  • 用于定义返回结果的字段。
  • path:表示完整的路径,包括起点、终点以及中间的顶点和边。
  • AS <alias>:对路径结果设置别名。

h. ORDER BY 和 LIMIT

  • ORDER BY:对返回的路径进行排序,通常使用 path 相关的表达式进行排序。
  • LIMIT:限制返回路径的数量。

语法扩展部分
在这里插入图片描述

2.2 例子

例 1:查找最短路径

FIND SHORTEST PATH FROM "player100" TO "player300" OVER follow
YIELD path AS shortest_path;

作用:

  • 查找从 “player100” 到 “player300” 的所有最短路径。
  • 路径中使用的边类型为 follow。
  • 返回路径并命名为 shortest_path。

在这里插入图片描述

例 2:查找指定步数内的路径

FIND ALL PATH FROM "player100" TO "player500" OVER follow 
UPTO 3 STEPS
YIELD path AS all_paths;
  • 作用:

  • 查找从 “player100” 到 “player500” 的所有路径,路径步数最大为 3。

  • 路径中使用 follow 边类型。

在这里插入图片描述

例 3:查找无环路径

FIND NOLOOP PATH FROM "player100" TO "player500" OVER follow, teammate
YIELD path AS noloop_paths;

在这里插入图片描述

例 4:查找路径并带有属性

FIND SHORTEST PATH WITH PROP FROM "player100" TO "player300" OVER follow
YIELD path AS shortest_path;

在这里插入图片描述

例 5:排序和分页

FIND SHORTEST PATH FROM "player100" TO "player500" OVER follow
YIELD path AS shortest_path
| ORDER BY length($-.shortest_path) ASC
| LIMIT 1;

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com