繁体   English   中英

根据查询结果在neo4j中创建边

[英]Creating edges in neo4j based on query results

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

在此输入图像描述

我现在想要创建一个累积权重为4的边缘来表示4个用户完成了这个特定的过渡。 如何将count(*)查询的结果与create查询组合以生成属性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:

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

如果先匹配节点和关系,然后使用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函数将创建重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM