【问题标题】:Creating edges in neo4j based on query results根据查询结果在 neo4j 中创建边
【发布时间】:2018-05-27 08:43:26
【问题描述】:

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

我现在想创建一条累积权重为 4 的边,以表示有 4 个用户进行了此特定转换。如何将count(*) 查询的结果与创建查询相结合,以生成具有属性weight = 4 的边

我的count(*) 查询是:

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

我希望组合查询看起来像这样,但这种类似 sql 的组合在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

关于如何处理和建模此问题的任何其他想法?

【问题讨论】:

  • 在第一个查询中使用 with 是 count(*),在第二个查询中创建您的关系
  • 能否请您制定查询? with 会是什么样子?谢谢!
  • 对不起,我工作很忙,暂时无法解释更多我的答案:)

标签: graph neo4j cypher


【解决方案1】:

像这样使用 WITH:

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】:

    如果先匹配节点和关系再使用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 函数将创建副本。

    【讨论】:

    • 他想创建新关系并在该关系中添加计数属性。
    猜你喜欢
    • 2013-01-15
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多