neo4j 利用密码中的相关实体重建图

2admgd59  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(121)

我是一个密码初学者。我试图谷歌我的问题,但找不到答案。
假设node-1svc-1有关系,node-2svc-2有关系,node-2node-1有关系。
是否可以进行一个查询,查找node-1node-2之间的路径,以创建svc-1svc-2之间的关系?
例如,我们有以下数据

[
    {
        "spanId":"3",
        "name": "checkOut",
        "parentId": "2",
        "service_name": "svc-2"
    },
    {
        "spanId":"4",
        "name": "payment",
        "parentId": "3",
        "service_name": "svc-2"
    },
    {
        "spanId":"2",
        "name": "addCart",
        "parentId": "1",
        "service_name": "svc-1"
    },
    {
        "spanId":"1",
        "name": "frontend",
        "service_name": "svc-1"
    }
]

我们有

  1. frontend -> addCart用于svc-1
  2. checkOut -> payment用于svc-2
  3. addCart -> checkOut

从span视图中,我们有路径frontend -> addCart -> checkOut -> payment,但是从service中,我希望有svc-1 -> svc-2并且只显示它。有密码查询吗?

yizd12fk

yizd12fk1#

如果您实际上只想查看svc-1svc-2的名称,如果存在从node-1node-2PARENT_OF路径:

MATCH (s1:Service)<-[:FROM_SERVICE]-(n1:Node)-[:PARENT_OF*..7]->(n2:Node)-[:FROM_SERVICE]->(s2:Service)
WHERE n1.name = 'frontend' AND n2.name = 'payment'
RETURN s1.name AS s1_name, s2.name AS s2_name

我将可变长度路径搜索限制为7的任意深度,以避免查询时间过长或耗尽内存(如果您有大量数据)。
我建议不要在svc-1svc-2之间实际创建新的关系,因为这将存储冗余信息,而且实际上可能会令人困惑(因为并非所有可能的PARENT_OF路径都具有相同的服务节点对)。

相关问题