Neo4j/Gremlin/Cypher:如何获取所有节点,直到我在类似地图的设置中达到一定距离(深度)?

2024-04-10

我有一个带有字段的简单图表 - 每个字段有 4 个邻居(东北-南-西):

@NodeEntity
public class Field {
    @GraphId
    Long id;
    Field north;
    Field east;
    Field south;
    Field west;
    //.. other stuff
}

我设置了一个图形数据库(neo4j),因此这些都很好并且相互连接(就像网格一样)。我现在想做的是从起始节点获取所有节点,即 5 跳之外的节点。

通过经典的遍历,效果很好,如下所示:

public  Collection<Field> getFieldsWithDepth(Field startField, final int depth) {       
    Node fieldNode = this.getGraphdb().getNodeById(startField.getId());
    Traverser traverser = fieldNode.traverse(Traverser.Order.BREADTH_FIRST, // check direct relations first, then go deeper 
            new StopEvaluator() {

                @Override
                public boolean isStopNode(TraversalPosition pos) {
                    if (pos.depth()==depth)
                        return true;
                    else
                        return false;
                }
            },  // worst case: go to end of graph 
            new ReturnableEvaluator() {

                @Override
                public boolean isReturnableNode(TraversalPosition pos) {
                    return true;
                }
            },
            Relations.north,    
            Direction.OUTGOING,
            Relations.east,
            Direction.OUTGOING,
            Relations.west,
            Direction.OUTGOING,
            Relations.south,
            Direction.OUTGOING
            );

    ArrayList<Field> fields = new ArrayList<Field>();
    for (Node node : traverser.getAllNodes())
    {
        fields.add((Field)this.getGraph().get(node));
    }
    return fields;
}

所以如果我有一个像这样的“地图”:

  1   2   | 3|   4    5 
  6  |7|  | 8| | 9|  10
|11| |12| *13* |14| |15|
 16  |17| |18| |19|  20
 21   22  |23|  24   25 

我使用起始节点“13”和“深度”2 进行查询,我需要获取标记的 12 个节点 - 因为它们距 13 两步。

我在这个中使用了jo4neo...

如何在 cypher 或 gremlin 中实现相同的功能?

我找到了朋友的朋友的例子,但这并没有真正帮助我,因为我需要深度作为参数(即在某些情况下我想要深度为 4,有时为 6)。

Note:除了字段之外还有其他连接,但我显然只需要字段。另外,我需要获取所有连接的节点 - 而不仅仅是一个方向。

解决方案:感谢指点,我得到了解决方案:

start n=node(13) match n-[*1..2]->b where b.__type__ = "model.Field" return distinct b

http://docs.neo4j.org/chunked/snapshot/query-match.html#match-variable-length-relationships http://docs.neo4j.org/chunked/snapshot/query-match.html#match-variable-length-relationships

START a=node(3)
MATCH a-[:FRIEND*1..3]->x
RETURN a,x

如果你想要 3 个步骤:

MATCH a-[:FRIEND*3..3]->x

希望这可以帮助!

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

Neo4j/Gremlin/Cypher:如何获取所有节点,直到我在类似地图的设置中达到一定距离(深度)? 的相关文章

  • Neo4j:插入 7k 节点很慢(Spring Data Neo4j / SpringRestGraphDatabase)

    我正在构建一个应用程序 我的用户可以在其中管理字典 其中一项功能是上传文件以初始化或更新词典的内容 我首先关注的结构部分是Dictionary CONTAINS gt Word 从一个空数据库 Neo4j 1 9 4 但也尝试过 2 0 0
  • ZedGraph 垂直线与 LineObj 问题

    我有一个 ZedGraphControl 里面有几条曲线 我想在一些固定的 x 位置添加垂直线 当然 这些线只能位于实际图形区域内 我尝试以下 LineObj line new LineObj Color Black xPos myPane
  • 带回溯的 Dijkstra 算法?

    In a 相关主题 https stackoverflow com questions 28333756 finding most efficient path between two nodes in an interval graph
  • Kamada 和 Kawai 图形布局算法? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人尝试过 Kamada Kawai 的 88 算法来绘制一般无向图吗 如果是这样 并且您知道其中的任
  • 向图节点添加标签

    我使用 visnetwork 库制作了下图 library tidyverse library igraph set seed 123 n 15 data data frame tibble d paste 1 n relations da
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • 如何禁用 Spring Data Neo4j 的登录

    我从 spring neo4j 收到不需要的查询日志 如下所示 25 08 2018 23 47 07 597 restartedMain INFO o n o d bolt request BoltRequest executeReque
  • 使用 d3 进行多级/分组轴标签

    我想知道是否有一种简单的方法可以在 d3 中添加多级 分层 分组轴标签 例如 如果我有一个折线图 其中 x 轴的月份名称跨越多年 那么我还希望将年份作为月份名称下方的标签 因此它看起来像这样 Oct Nov Dec Jan Feb Mar
  • R中一张图中的多个条形图

    我是 R 初学者 我需要创建一个像这样的图表 https i stack imgur com az56z jpg https i stack imgur com az56z jpg 我不知道如何生成整个数据集 基本思想是某个外显子 ID 会
  • Neo4j - 根据关系属性查找两个节点之间的最短路径

    我试图弄清楚是否有某种方法可以根据关系总和获得两个节点之间的最短距离 给出以下示例 neo4j 图像示例 https i stack imgur com fiJe1 png 上图代码 CREATE some point 1 Point ti
  • Silverlight 中的图形可视化

    我有一个表示有向图的数据结构 我正在寻找一个好的 Silverlight 可视化 以允许我从一个节点导航到另一个节点 最好带有一些漂亮的动画 有谁知道这种显示有什么好的 UI 控件或框架吗 甚至是来自另一个领域的样本 也许是社交网络 我的图
  • 如何转储 neo4j 图形数据库?

    我将所有数据库存储在一个位置C JATIN DATA 数据库 neo4jDatabases 如何使用 neo4j Desktop 单独转储所有数据库 我已经尝试过 neo4j admin dump database to 这个命令但出现错误
  • 为什么图的 C++ 数据结构隐藏连续的整数索引?

    有向图和无向图的数据结构至关重要 众所周知且广泛使用的实现 例如Boost图库 http www boost org doc libs 1 56 0 libs graph doc table of contents html and Lem
  • 使用 Java 进行树可视化 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个库来生成图形或树 例如组织图表 该库应该能够从该图中生成纯图像 有谁知道一个好的 希望开源
  • 如何结识有相同兴趣的朋友的朋友?

    交朋友的朋友很容易 我得到了这个 看起来效果很好 g v 1 in FRIEND in FRIEND filter it g v 1 但我想做的只是结交有相同兴趣的朋友的朋友 下面我希望 Joe 被推荐为 Moe 而不是 Noe 因为他们没
  • 使用 Rgraphviz 中的 pos 参数来固定节点位置

    基于这个问题当弧与另一弧重叠时自动弯曲 https stackoverflow com questions 45721802 automatically curving an arc when it is overlapping with
  • Facebook Workplace API 身份验证

    我正在开发一个与 Facebook 的 Workplace 集成的 Web 应用程序 我花了一整天的时间试图弄清楚如何使用 OAUTH 身份验证机制进行成员身份验证 由于我拥有应用程序访问令牌 我能够获取用于模拟的成员访问令牌 但是 我如何
  • iOS 上有像 JUNG 这样的可视化框架吗?

    有没有类似的可视化框架JUNG http jung sourceforge net applet index html对于iOS 我想实现类似的东西this http prefuse org gallery graphview iOS 上最
  • 生成和保存 ZedGraph 绘图而不在表单上显示

    是否可以将数据绘制到 ZedGraph 图表上并将其保存为文件 而不显示 生成用户可见的图表 我希望处理大量数据集并生成图表并将其保存到文件中以便在应用程序外部查看 如果无法做到这一点 是否可以在隐藏 最小化表单上显示图形 保存图形 关闭窗
  • 您将如何显示/布局企业应用程序之间的数据流?

    我的雇主是一家大型瑞士电信公司 我们有许多系统用于为不同任务传输数据 例如性能管理 故障管理 配置管理等 为了向 管理 尖头等 解释这些系统如何交互 我将有关数据流 格式 协议的信息收集到 数据库 逗号分隔的说服者 中 然后为 Graphv

随机推荐