查询插入语句(neo4j merge转换)

  • nebula 版本:2.5.
  • 部署方式(分布式):
  • 是否为线上版本:N
  • 硬件信息
    • hhd)
    • CPU32、内存信息128GB

问下 nebula 如何实现像 neo4j merge(insert,入图后,再通过现有的点和边,生成新的边)

neo4j语句1

MATCH (t1)<-[:tagged_by]-(c:Content)-[:tagged_by]->(t2) where c.entity_id ="w000065j1on" WITH t1, t2, sum(c.count) as weight, min(c.timestamp) as earliest, max(c.timestamp) as latest  WHERE id(t1) < id(t2)
 RETURN (t1)-[:related_tag {weight:weight }]-(t2)

neo4j语句2

MATCH (t1)<-[:tagged_by]-(c:Content)-[:tagged_by]->(t2)
WITH t1, t2, sum(c.count) as weight, min(c.timestamp) as earliest, max(c.timestamp) as latest  WHERE id(t1) < id(t2)
MERGE (t1)-[:related_tag {weight:weight }]-(t2)

nebula 语句 报错

MATCH (t1)<-[:tagged_by]-(c:Content)-[:tagged_by]->(t2) 
where id(c) =="w000065j1on" 
WITH t1, t2, sum(c.count1) as weight, min(c.timestamp1) as earliest, max(c.timestamp1) as latest  WHERE id(t1) < id(t2)

RETURN [p:related_tag {weight:weight }]->(t2)

neo4j return的效果,如图

1 个赞

语句 1 报错是因为 nebula 还不支持 RETURN pattern。
语句 2 也不支持,nebula 现在只支持显式指定实体 id 来写入,用起来确实没有 cypher 这些语法方便。实现类似 neo4j merge 的话,目前也只能先把 t1 和 t2 的 id 先查出来。

1 个赞

直接语句可以解决这种业务场景吗?(可以给个示例),不能解决的话,是通过程序自己遍历节点和边重新创建新的边吗?感谢

直接语句不能解决。

是的

明白了

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。