我正在将电子商务软件中的搜索词转换图建模为节点(术语)和边(转换)的图形。如果用户输入例如在搜索栏中iphone
,然后将查询细化为iphone 6s
,这将被建模为两个节点和这些节点之间的边缘。不同用户的术语的相同转换将导致节点之间的若干边缘。
我现在想要创建一个累积权重为4的边缘来表示4个用户完成了这个特定的过渡。如何将count(*)
查询的结果与创建查询相结合,以生成具有属性weight = 4
的边
我的count(*)
查询是:
MATCH (n:Term)-[r]->(n1:Term)
RETURN type(r), count(*)
我希望合并后的查询看起来像这样,但cypher
中似乎无法使用这种类似sql的组合:
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
关于如何处理和建模此问题的任何其他想法?
答案 0 :(得分:3)
像这样使用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
答案 1 :(得分:0)
如果先匹配节点和关系,然后使用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函数将创建重复项。