Tinkerpop Gremlin 深度优先搜索顺序

2024-01-11

我有一个非常简单的示例图,我试图对其进行深度优先查询。假设图的边看起来像这样

A->B
A->C
B->D
B->E
C->F
C->G

从 A 开始的深度优先搜索应该返回

A-B-D-E-C-F-G

但如果我能得到下面的订单那就更好了

D-E-B-A-F-G-C-A

如何创建将输出此订单的 Gremlin 查询?如果我做这样的事情

g.V('A').repeat(outE().inV()).emit()

我得到的顺序是 A、B、C、D、E、F、G,即广度优先。我不知道如何获得上面我想要的订单。


为了让其他人重现,这里是示例图:

g = TinkerGraph.open().traversal()
g.addV().property(id, 'A').
  addV().property(id, 'B').
  addV().property(id, 'C').
  addV().property(id, 'D').
  addV().property(id, 'E').
  addV().property(id, 'F').
  addV().property(id, 'G').
  addE('link').from(V('A')).to(V('B')).
  addE('link').from(V('A')).to(V('C')).
  addE('link').from(V('B')).to(V('D')).
  addE('link').from(V('B')).to(V('E')).
  addE('link').from(V('C')).to(V('F')).
  addE('link').from(V('C')).to(V('G')).iterate()

从 A 开始的深度优先搜索应该返回

A-B-D-E-C-F-G

gremlin> g.V('A').repeat(out('link')).until(__.not(outE('link'))).path().
           unfold().dedup().id().fold()
==>[A,B,D,E,C,F,G]

但如果我能得到下面的订单那就更好了

D-E-B-F-G-C-A

这有点像从后面卷起路径。这很棘手,但可行:

gremlin> g.V('A').
           repeat(outE('link').aggregate('edges').inV()).
             until(__.not(outE('link'))).
           flatMap(
             union(identity(),
                   repeat(inE('link').where(within('edges')).as('current').
                          map(select('edges').unfold().
                                where(neq('current').and(without('done'))).
                              outV().where(without('ad')).fold()).as('bl').
                          select(last, 'current').store('done').
                            filter(outV().where(without('bl').and(without('ad')))).
                          outV().store('ad')).
                     emit())).
           id().fold()
==>[D,E,B,F,G,C,A]

但是,获取路径并在应用程序端进行排序可能要容易得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tinkerpop Gremlin 深度优先搜索顺序 的相关文章

  • 在 WIndows 下安装 Apache Tinkerpop (Gremlin)

    一 安装 JDK 首先安装 Java JDK xff0c 这个去官网下载即可 xff0c 我下载安装的 JDK19 xff08 jdk 19 windows x64 bin msi xff09 xff0c 细节不赘述 二 去 Tinkerp
  • Gremlin 日期过滤方法

    有没有办法查询 titan gremlin 的日期 例如查找过去 X 天内的所有结果 任何帮助将非常感激 最好的方法是简单地将日期存储为 Long 值 并可能在边缘中的此类字段上建立索引 以便您可以利用limit interval等 请参阅
  • 如何打印 Gremlin 管道/遍历结果

    我在名为的文件中有下面的代码traversal groovy 我从命令行调用gremlin e traversal groovy Begin traversal groovy g TinkerGraphFactory createTinke
  • 使用 Gremlin 递归查询更简单的树状结构

    考虑以下数据 g addV RootTopic property name A as A addV RootTopic property name M as M addV Topic property name A1 as A1 addV
  • Spark 集群和 Cassandra 的 Titan 设置和配置

    aurelius 邮件列表以及 stackoverflow 上已经有几个关于配置 Titan 使其与 Spark 一起工作的具体问题的问题 但我认为缺少的是使用 Titan 和 Spark 的简单设置的高级描述 我正在寻找的是使用推荐设置的
  • 为什么 Gremlin JavaScript 使用“from_”映射而不是“from”?

    在发现你必须使用之前我为此苦苦挣扎了几个小时from 代替from使用 gremlin javascript 时 在深入研究源代码后 我终于发现代码正在使用from 代替from see code 因为我是新手 所以这很奇怪 因为它的对应部
  • 变量 - 海王星上的 Gremlin

    我位于 Gremlin 控制台并连接到 AWS Neptune 数据库 g V hasLabel Risk toList 提供了预期的结果 但是当我尝试将结果分配给变量时 risks g V hasLabel Risk toList 我收到
  • 通过 Tinkerpop 使用特定模型将(数百万行)数据导入 Janusgraph 的最佳方法

    刚开始使用 Tinkerpop 和 Janusgraph 我正在尝试根据文档来解决这个问题 我有三个数据集 每个数据集包含大约 2000 万行 csv 文件 有一个特定的模型 其中的变量和行需要连接 例如什么是顶点 什么是标签 什么是边 等
  • 在 Azure Cosmos DB 中使用 Gremlin 重命名属性

    我们的一些代码库已经更改 因此它现在期望过去具有名称为 Sdg 的属性的顶点现在具有名称为 causeType 且具有相同值的属性 简而言之 财产的重命名 在这一点上我已经尝试了很多 而且 令我有点惊讶的是弄清楚如何搜索图表并在需要时进行重
  • 将 gremlin CLI 连接到远程tinkerpop gremlin-server

    Using gremlin javascript 我使用以下方式连接到远程服务器 const gremlin require gremlin const Graph gremlin structure Graph const DriverR
  • CosmosDB 创建 - API 选项(SQL 与 Graph)

    我有兴趣使用Azure CosmosDB https learn microsoft com en us azure cosmos db 因为它的图形功能 通过查看文档 我发现它将图形顶点和边作为 JSON 文档 具有商定的模式 因此可以作
  • Gremlin Python createIndex (Tinkerpop)

    我目前正在使用 Tinkerpop 与gremlin python 客户端 https pypi python org pypi gremlinpython 3 2 4使用默认的TinkerGraph Gremlin https tinke
  • python gremlin连接超时问题

    获取 gremlin 驱动程序超时问题如下 我们已经提高了吞吐量并进行了尝试 但仍然在进行中 12 05 2019 06 50 33 gt 1376bf ERR Traceback most recent call last 12 05 2
  • Janusgraph在.net core 3.0中使用Gremlin查询

    我们目前在 net core 3 0 应用程序中使用 gremlin net 库来连接到 Janusgraph db 我们需要在 janusgraph 中执行以下查询g V 12345 outE myedge has datetime lt
  • Gremlin 找到最高匹配

    我计划使用图形数据库 AWS Neptune 可以使用 Gremlin 作为一种知识库进行查询 知识库将用作具有多个特征的实体的分类工具 为简单起见 我在本示例中使用几何形状来编码实体的属性 假设我想对与正方形 三角形和圆形相关的点进行分类
  • gremlin 查询中的类型转换

    如何使用 AWS Neptune GDB 在 gremlin 控制台中将字符串值转换为整数类型 我的属性 age 带有字符串值 需要将其转换为整数类型以进行查询中的数学运算 感谢所有建议 我尝试了以下 kelvin 建议的查询 但遇到了这些
  • Bulbflow:neo4jserver Graph 和 neo4jserver Neo4jclient 之间的区别

    我现在正在尝试学习如何连接到 Neo4j 服务器并使用 Python 中的 Bulbflow 在其上运行 Cypher 查询 我不明白的是连接到 neo4j 服务器的两种可能性之间的区别 1 Graph http bulbflow com
  • 升级到 AnonymousTraversalSource (Gremlin 3.3.5+ Node.js)

    我正在 Lambda Nodejs12 x 中编写代码 我想更新到未弃用的连接方式 const gremlin require gremlin const DriverRemoteConnection gremlin driver Driv
  • Gremlin 中的广度优先枚举

    我正在尝试使用 Gremlin 进行广度优先枚举 但是我无法找到一种方法来输出枚举期间观察到的所有步骤 我只能打印出最后一次迭代的结果 我的问题是 给定这样的起始节点 我如何使用 Gremlin 跟踪所有路径 不知道整体深度 并打印出我沿途
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal

随机推荐

  • 关于std::add_pointer的实现的一个问题

    From std add pointer https en cppreference com w cpp types add pointer 可能的实施 namespace detail template
  • 更改 momentjs 对象上的事件触发

    对于我的一个项目 我正在监听模型对象的属性更改 并在其属性更改时调用视图方法 问题是我的模型的属性之一是 momentjs 日期对象 我研究了主干源代码 似乎它使用下划线方法触发了设置器中的更改 isEqual 看完之后下划线文档 http
  • Flux 存储将更改发送到特定的 React 组件而不是所有组件。

    努力寻找或想出一个优雅的答案 如果我有多个动态反应组件正在侦听一个通量存储以更新其子组件 是否可以发出对特定组件的更改 而不是向注册以侦听该存储上的更改的所有组件发出更改 例如 动态组件有一个按钮 单击时它会告诉通量存储将一些数据发送到 A
  • 3rd 方媒体播放器 SDK 或其他选项

    我正在为我经常访问的多媒体网站编写一个应用程序 但遇到了问题 获取视频流 URL 封装在 mp4 容器中的 h264 并尝试使用本机视频播放器播放它后 失败 这是在我的 Moto Droid 上运行的 运行 2 2 BB 和 2 3 CM7
  • graph.facebook feed 返回一个空数组

    提前致谢 有人可以帮我理解为什么 facebook feed 返回一个空数组吗 data 您需要一个带有 read stream 的用户访问令牌来存储用户帖子 此外 查询的用户需要授予应用程序 read stream 权限 您当前正在使用应
  • 为什么新的 ASP.NET Identity 表停止使用 Guid(唯一标识符类型)作为键?

    我试图理解为什么新的 ASP NET Identity 表停止使用Guid 唯一标识符类型 作为键 相反 它现在使用nvarchar 128 但仍保留一个Guid as a string 这不是一种巨大的浪费吗 uniqueidentifi
  • 如何使用代码备份/恢复 PostgreSQL?

    我努力了this http www codeproject com Articles 37154 PostgreSQL PostGis Operations方法 但它不起作用任何人都可以纠正它或分享一些教程Backup Restore Po
  • Tapestry mixin 究竟是如何工作的?

    我读完后才意识到本文 http tapestry apache org component mixins html我无法向自己解释它是如何工作的以及它可以解决什么问题 是的 它可以用来改变现有组件的行为 但如何限制呢 我能做什么 不能做什么
  • 字典上的 json.dumps,其中键字节为字节

    尝试使用 json dumps 将具有字节类型键的字典对象转换为 json 字典对象的格式事先未知 使用 json dumps 时找到了具有字节值的数组或字典的解决方案 将列表 或字典 中嵌入的字节转换为 str 以与 json dumps
  • OpenCV 2.3 无法编译,未定义的引用错误

    我在 Windows 7 64 位和 Netbeans 7 0 中使用 OpenCV 我尝试使用 MinGW 和 cygwin 编译下一个代码 但都因未定义的引用而失败 当我使用 MAT 或 FLANN 等时 我无法编译 但我添加了所有库
  • WordPress API 按类别获取帖子

    是否可以按类别获取所有帖子 http codex wordpress org XML RPC WordPress API Posts http codex wordpress org XML RPC WordPress API Posts
  • 在身份验证配置中找不到 Pod 执行角色或不具有所有必需的权限。我该如何调试?

    客观的 我希望能够使用 Fargate 部署 AWS EKS 我已经成功地进行了部署node group 然而 当我转而使用 Fargate 时 Pod 似乎都陷入了挂起状态 我当前的代码是什么样的 我正在使用 Terraform 进行配置
  • 在asp.net中发送邮件

    我正在使用 asp net 3 5 和 C 我想从 asp net 发送邮件 因为我从我的托管提供商处获得了一些详细信息 这些是 邮件 MySite net UserName Password 但我无法通过这些详细信息发送邮件 我在 web
  • Oracle TO_DATE 不工作

    我有这个查询不返回任何行 但有些记录的日期大于 90 年 6 月 25 日 为什么它不起作用 SELECT employee id last name hire date FROM employees WHERE hire date gt
  • C- SIGUSR1 在语法上到底是什么

    当我在kill 或signal 函数中使用SIGUSR1时 它在做什么 是宏吗 我读到它是用户定义的 但它是在哪里定义的 我可以制作 SIGUSR10 或以编程方式制作不同信号类型的 数组 吗 用户定义的信号意味着这些信号没有明确的含义 与
  • 使用 apache mod proxy 删除基本身份验证标头

    我有一个 HTTP Basic 安全网站 我用 mod proxy 隐藏了 Tomcat 应用程序服务器 我可以删除 HTTP Basic 标头吗 Tomcat应用程序读取标头并返回401未授权 不需要基本身份验证 因为应用程序使用 coo
  • 如何在 TypeORM 中模拟 EntityManager?

    我有以下代码从我的 NestJS 服务中模拟实体管理器 它在某种程度上有效 但问题在于指定什么findOne应该返回不同的实体 provide getEntityManagerToken useFactory connection Conn
  • R:根据数据框列表中的数据框名称设置列名称

    我有一个很大的数据框列表 如下所示 gt head lst Set1 ID Value 1 A 1 2 B 1 3 C 1 Set2 ID Value 1 A 1 2 D 1 3 E 1 Set3 ID Value 1 B 1 2 C 1
  • 自定义 sp_who 而不授予查看服务器状态

    我需要一个存储过程 可以将其提供给一组用户 使他们能够查看所有正在运行的进程 例如sp who 但我不希望这些用户拥有VIEW SERVER STATE权限 因为这会暴露太多元数据 我还需要允许用户终止进程 这是专门用于该组的开发服务器 我
  • Tinkerpop Gremlin 深度优先搜索顺序

    我有一个非常简单的示例图 我试图对其进行深度优先查询 假设图的边看起来像这样 A gt B A gt C B gt D B gt E C gt F C gt G 从 A 开始的深度优先搜索应该返回 A B D E C F G 但如果我能得到