当前位置: 首页 > news >正文

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

【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;

在这里插入图片描述

相关文章:

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

【NebulaGraph】官方查询语言nGQL教程1 1. 课程信息2. 查找路径FIND PATH2.1 补充说明FIND PATH2.2 例子 1. 课程信息 课程地址: https://www.bilibili.com/video/BV1PT411P7w8/?spm_id_from333.337.search-card.all.click&vd_source240d9002f7c7e3da63cd9a975639409a …...

阿里云负载均衡SLB实践

基于上篇文章继续&#xff0c;如果你使用的是阿里云等云平台&#xff0c;通过配置nginxkeepAlived行不通&#xff0c;因为阿里云服务器不支持你虚拟出ip提供给外部访问&#xff0c;需要使用阿里云的负载均衡产品 对应的产品有三个系列 1、应用场景 ALB: 主要是对应应用层的7层…...

鸿蒙技术分享:❓❓[鸿蒙应用开发]怎么更好的管理模块生命周期?

鸿蒙HarmonyOS NEXT应用开发架构设计-模块生命周期管理 模块化开发 模块化开发已经是应用开发中的一个共识&#xff0c;一般对于公司级的应用开发&#xff0c;都会考虑是否可以进行模块化开发。 HarmonyOS NEXT系统应用开发目前使用的Stage模型其实就有涉及模块化开发的部分…...

深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(上)

文章目录 一、ansible的主要组成部分二、安装三、相关文件四、ansible配置文件五、ansible 系列 一、ansible的主要组成部分 ansible playbook&#xff1a;任务剧本&#xff08;任务集&#xff09;&#xff0c;编排定义ansible任务集的配置文件&#xff0c;由ansible顺序依次执…...

LabVIEW气缸摩擦力测试系统

基于LabVIEW的气缸摩擦力测试系统实现了气缸在不同工作状态下摩擦力的快速、准确测试。系统由硬件平台和软件两大部分组成&#xff0c;具有高自动化、精确测量和用户友好等特点&#xff0c;可广泛应用于精密机械和自动化领域。 ​ 项目背景&#xff1a; 气缸作为舵机关键部件…...

Leetcode. 688骑士在棋盘上的概率

题目描述 原题链接&#xff1a;Leetcode. 688骑士在棋盘上的概率 解题思路 多元dp 将dp[step][i][j])定义为从(i, j)出发&#xff0c;走step步之后骑士还在棋盘上的概率。 如果 ( i , j ) (i,j) (i,j)不在棋盘上&#xff0c;即非 0 < i < n 0<i<n 0<i<…...

TCP/IP 协议栈高效可靠的数据传输机制——以 Linux 4.19 内核为例

TCP/IP 协议栈是一种非常成熟且广泛使用的网络通信框架,它将复杂的网络通信任务分成多个层次,从而简化设计,使每一层的功能更加清晰和独立。在经典的 TCP/IP 协议栈中,常见的分层为链路层、网络层、传输层和应用层。本文将对每一层的基本功能进行描述,并列出对应于 Linux …...

Ubuntu22.04搭建LAMP环境(linux服务器学习笔记)

目录 引言&#xff1a; 一、系统更新 二、安装搭建Apache2 1.你可以通过以下命令安装它&#xff1a; 2.查看Apache2版本 3.查看Apache2运行状态 4.浏览器访问 三、安装搭建MySQL 1.安装MySQL 2.查看MySQL 版本 3.安全配置MySQL 3.1是否设置密码&#xff1f;(按y|Y表…...

鸿蒙面试---1208

HarmonyOS 三大技术理念 分布式架构&#xff1a;HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如&#xff0c;它允许用户在不同的智能设备&#xff08;如手机、平板、智能手表等&#xff09;之间共享数据和功能。比如&#xff0c;用户可以在手机上开始编辑文档&…...

java基础教程第16篇( 正则表达式)

Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细微的差别。 Java 提供了 java.util.regex 包&#xff0c;它包含了 Pattern 和 Matcher 类&#xff0c;用于处理正…...

Docker部署的gitlab升级的详细步骤(升级到17.6.1版本)

文章目录 一、Gitlab提示升级信息二、老版本的docker运行gitlab命令三、备份老版本Gitlab数据四、确定升级路线五、升级(共分3个版本升级)5.1 升级第一步(17.1.2 > 17.3.7)5.2 升级第二步(17.3.7 > 17.5.3)5.3 升级第三步(17.5.3 > 17.6.1) 六、web端访问gitlab服务 一…...

【如何制定虚拟货币的补仓策略并计算回本和盈利】

在虚拟货币市场中,价格波动性极大,如何在波动中生存并获得盈利是每个投资者都在思考的问题。作为一种投资策略,补仓(又称“摊低成本”)常常被用来降低持仓成本,并在市场回升时获得更大的盈利。但如何科学地设定补仓计划,确定回本点和盈利目标呢? 本文将以 Dogecoin 为…...

给图像去除水印攻

去除水印的过程与添加水印相反&#xff0c;它涉及到图像修复、颜色匹配和区域填充等技术。OpenCV-Python 提供了多种方法来处理不同类型的水印&#xff0c;包括但不限于纯色水印、半透明水印以及复杂背景上的水印。下面将详细介绍几种常见的去水印策略&#xff0c;并给出具体的…...

Linux之封装线程库和线程的互斥

Linux之封装线程库和线程的互斥与同步 一.封装线程库二.线程的互斥2.1互斥量的概念2.2初始化和销毁互斥量2.3加锁和解锁2.4互斥量的原理2.5可重入和线程安全2.6死锁 一.封装线程库 其实在我们C内部也有一个线程库而C中的线程库也是封装的原生线程库的函数&#xff0c;所以我们…...

PH热榜 | 2024-12-08

1. Reforged Labs 标语&#xff1a;轻松为手游工作室制作AI广告。 介绍&#xff1a;Reforged Labs 推出了一款前所未有的AI视频制作服务。我们自动化了以往昂贵且耗时的创意流程&#xff0c;取而代之的是能快速、低成本地为各个工作室量身定制视频广告。 产品网站&#xff1…...

LeetCode刷题day20——贪心

LeetCode刷题day20——贪心 435. 无重叠区间763. 划分字母区间分析&#xff1a; 56. 合并区间分析&#xff1a; 435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 …...

CCF编程能力等级认证GESP—C++3级—20241207

CCF编程能力等级认证GESP—C3级—20241207 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)数字替换打印数字 单选题&#xff08;每题 2 分&#xff0c;共 …...

Microi 吾码:大数据浪潮中的智能领航者

目录 一、大数据时代的挑战与机遇 二、Microi 吾码在大数据存储方面的应用 与分布式文件系统的集成 数据库存储优化 三、Microi 吾码在大数据处理与分析中的应用 数据清洗与转换 数据分析与挖掘 四、Microi 吾码在大数据可视化中的应用 五、Microi 吾码在大数据流式处…...

Lua语言入门 - Lua 数组

Lua 数组 数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;可以是一维数组和多维数组。 在 Lua 中&#xff0c;数组不是一种特定的数据类型&#xff0c;而是一种用来存储一组值的数据结构。 实际上&#xff0c;Lua 中并没有专门的数组类型&#xff…...

gulp应该怎么用,前端批量自动化替换文件

背景 最近公司准备把所有项目中用到的国际化相关的key规范化&#xff0c;原因是: 一直以来公司的app和web端 在针对相同的需求以及相同的国际化语言&#xff0c;需要设置不同的两份国际化文件&#xff0c;难以维护旧版的国际化文件中&#xff0c;存在的大量值重复&#xff0c…...

ARM架构计数器与定时器虚拟化技术详解

1. ARM架构中的计数器-定时器虚拟化技术概述在现代虚拟化环境中&#xff0c;精确的时间管理是确保虚拟机性能和功能完整性的关键要素。ARMv8/v9架构通过一系列精心设计的系统寄存器和硬件特性&#xff0c;为hypervisor提供了强大的计数器与定时器虚拟化能力。这项技术允许每个虚…...

2026年好用的录音转文字工具怎么选?从链接提取到实时转写的完整方案

做会议记录、课堂笔记或内容创作时&#xff0c;经常卡在两个问题上&#xff1a;一是录音文件堆积成山不知道从何整理&#xff0c;二是转完文字还要花时间校对和调整。微信里有个叫提词匠的小程序在这类需求里效率比较实用&#xff0c;下面会重点拆解它怎么用&#xff0c;同时也…...

淘金币自动化脚本终极指南:如何每天5分钟完成淘宝全任务,节省20分钟宝贵时间

淘金币自动化脚本终极指南&#xff1a;如何每天5分钟完成淘宝全任务&#xff0c;节省20分钟宝贵时间 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/…...

Coding爆发打破「AI泡沫论」,MiniMax能否卡位下一个Google?

【Coding爆发打破「AI泡沫论」】 Coding的爆发&#xff0c;彻底断绝了「AI泡沫论」&#xff0c;这已成为共识。阿里财报显示MaaS ARR超过80亿元&#xff0c;年底还有望再涨三倍以上&#xff0c;意味着只有投入没有回报的周期已过去&#xff0c;能开始盈利&#xff0c;大小玩家都…...

如何永久保存微信聊天记录:WeChatMsg终极解决方案指南

如何永久保存微信聊天记录&#xff1a;WeChatMsg终极解决方案指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...

【实战指南】从零构建YOLACT自定义数据集:标注、转换与训练全流程

1. 环境准备与工具安装 第一次接触YOLACT实例分割模型时&#xff0c;最让人头疼的就是环境配置。我清楚地记得去年做智能货架项目时&#xff0c;光是配环境就折腾了两天。为了让各位少走弯路&#xff0c;我把踩过的坑都总结在这里。 首先需要安装的是Python 3.7环境&#xff0c…...

2026openclaw+hermes agent 安装指南3.0版

2026 年人工智能行业悄然完成了一场意义深远的战略转向。曾经如火如荼的纯对话大模型参数规模竞赛已成为过去&#xff0c;能够真正解决实际问题、具备落地执行能力的自主智能体&#xff0c;正式登上了历史舞台的中央&#xff0c;成为新一代生产力工具的核心驱动力。 在众多开源…...

自建个人数字图书馆:基于Go+Vue+SQLite的Alexandria部署与优化指南

1. 项目概述&#xff1a;一个现代数字图书馆的诞生如果你和我一样&#xff0c;是个重度数字内容爱好者&#xff0c;硬盘里塞满了从各种渠道收集的电子书、论文、技术文档、漫画&#xff0c;甚至是整理好的网页存档&#xff0c;那你一定体会过那种“找东西”的痛苦。文件散落在不…...

统信UOS系统管理员必看:一招搞定用户配置文件(.config/autostart)的模板化部署

统信UOS系统配置模板化实战&#xff1a;从屏保设置到全局用户环境部署 在大型企业或教育机构的桌面环境管理中&#xff0c;统信UOS作为国产操作系统的代表&#xff0c;其标准化部署能力直接影响运维效率。当我们在模板用户中精心配置了各项参数——从屏幕保护时间到电源管理策略…...

【限时技术白皮书】ElevenLabs藏文模型权重结构首度曝光:Transformer Decoder层中Tibetan Syllable Tokenization模块详解

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs藏文语音生成技术全景概览 ElevenLabs 作为全球领先的文本到语音&#xff08;TTS&#xff09;平台&#xff0c;目前尚未官方支持藏文&#xff08;བོད་སྐད་&#xff09;语音合成。其公…...