当前位置: 首页 > 知识库问答 >
问题:

并行创建节点之间的关系

阎咏思
2023-03-14

使用cypher和neo4j 2.0。

给定两组节点ID(长度相等)和一组权重,我想在相应的节点之间创建一个关系,并将权重设置为属性。例如,如果我有以下三个列表:

node list 1: (101, 201, 301)  
node list 2: (102, 202, 302)
weights:     (0.1, 0.6, 0.25)

我想创建以下表示形式

 101 - knows {w : .1}  - 102
 201 - knows {w : .6}  - 202
 301 - knows {w : .25} - 302

但不是,例如101-knows-302

我可以通过迭代我的参数,然后创建单独的查询来实现这一点。有没有一种方法来批量运行它,将我的lsits作为参数传递,并要求cypher按顺序匹配节点和属性?

我曾一度认为以以下方式使用参数会起作用,但它会创建关系的所有排列(正如预期的那样),并将权重的整个列表作为属性分配给每个关系。

{
    "query": 
       "START a1=node({starts}), a2=node({ends}) 
        CREATE UNIQUE a1-[r:knows {w : {weights}}]-a2 
        RETURN type(r), r.w, a1.name, a2.name",

    "params": {
        "starts"  : [101, 201, 301],
        "ends"    : [102, 202, 302],
        "weights" : [0.1, 0.6, 0.25]
    }
}

共有1个答案

晏昀
2023-03-14

现实生活中你的单子有多大?我可能一次送一个三倍。

否则,您应该能够使用集合和foreach来执行您想要的操作:

START a1=node({starts}), a2=node({ends}) 
FOREACH(w in filter(w in weights : head(w)=id(a1) AND head(tail(w))=id(a2)) :
  CREATE UNIQUE a1-[r:knows {w : last(w)}]-a2 
)

"params": {
        "starts"  : [101, 201, 301],
        "ends"    : [102, 202, 302],
        "weights" : [[101,102,0.1], [201,202,0.6], [301,302,0.25]]
}
 类似资料:
  • 我需要在所有具有相同属性值的节点之间创建关系。 例如,我可以使用以下查询: 但是如果我有大约200K的节点,这个脚本运行的时间相当长。 有没有其他更快的方法来建立这样的关系? 谢谢

  • 我开始将Neo4J与Spring数据Rest一起使用。我有一个用于建模节点和边的节点实体和关系实体。我能够使用postman创建具有以下内容的新节点。 我不确定创建节点之间关系的JSON格式是什么。例如: 创建新节点并与现有节点关联 任何关于我需要使用什么JSON的例子都将不胜感激。 我的节点实体和关系实体如下:

  • 我正在创建一个简单的社交图,用户可以在其中创建一个帖子,标记它,并对它进行评论。我用py2neo做模型。该模型具有和作为节点。用户在上、或。在我的例子中,单个用户可以在单个上创建多个或(就像其他任何社交网络一样)。根据我的模型,这需要多个或关系,但具有不同的属性。模型是这样建立的: 我运行以下操作来构建图形: 我希望有两个关系,如下所示: 但我看到事实并非如此: 那么,我的问题是双重的。(1)可以

  • “email”节点以前是从另一个“people.csv”文件创建的,并且“email”节点存在唯一性约束。在上面的行中,我希望通过关系将“created_by”、“delivered_to”和“delivered_by”节点与之前创建的“email”节点合并。当我运行代码时,它给出了错误,并且没有从CSV中创建any节点。如何组织密码查询以防止此错误?谢了。

  • 花了好几天的时间试图弄明白为什么这不起作用。我的模型是

  • 我在R中使用igraph库创建了一个无向鄂尔多斯-仁义网络,它有100个节点,p=0.2: 我还创建了两个空网络: 我根据生成的随机数(0-1之间),从原始网络向net1和net2添加边。如果该随机数在0-0.1之间,则边进入net1,如果在0.1-0.9之间,则边进入net2,如果在0.9-1之间,则边同时进入net1和net2。 下面是我的代码,可以查看原始网络中的所有边缘,并将它们添加到ne