代码之家  ›  专栏  ›  技术社区  ›  paweloque

基于查询结果在neo4j中创建边

  •  1
  • paweloque  · 技术社区  · 6 年前

    我正在电子商务软件中建立一个搜索词转换图的模型,它是一个节点(术语)和边(转换)的图。如果用户键入。 iphone 在搜索栏中,然后将查询优化为 iphone 6s 这将被建模为两个节点和这些节点之间的一条边。不同用户的相同术语转换将导致节点之间的多个边。

    enter image description here

    我现在要创建一个累积权重为4的边来表示4个用户完成了这个特定的转换。我怎样才能把 count(*) 使用创建查询生成具有属性的边的查询 weight = 4

    计数(*) 查询是:

    MATCH (n:Term)-[r]->(n1:Term)
    RETURN type(r), count(*)
    

    我希望组合查询看起来像这样,但是在 cypher :

    MATCH (n:Term), (n1:Term)
    WHERE (n)-[tr:TRANSITION]->(n1)
    CREATE (n)-[actr:ACC_TRANSITION {count: 
        MATCH (n:Term)-[r]->(n1:Term) RETURN 
        count(*)}
    ]->(n1)
    RETURN n, n1
    

    MATCH (n:Term), (n1:Term)
    WHERE n.term = 'iphone' AND n1.term ='iphone 6s'
    CREATE (n)-[actr:ACC_TRANSITION {count: 4}]->(n1)
    RETURN n, n1
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   mastisa    6 年前

    像这样使用:

    MATCH (n:Term)-[r]->(n1:Term)
    WITH n as n, count(*) as rel_count, n1
    CREATE (n)-[:ACC_TRANSITION {count:rel_count}]->(n1)
    RETURN n, n1
    
        2
  •  0
  •   David A Stumpf    6 年前

    如果先匹配节点和关系,然后使用set,则不会生成重复的节点或关系

    Match (n:Term)-[r]->(n1.Term)
    with n as nn,count(r) as rel_count,n1 as nn1
    set r.ACC_TRANSITION=rel_count
    return nn,nn1,r
    

    create函数将创建重复项。