1

我正在尝试以这样的方式创建 (action)->(state) 对,以便如果:

  • 动作存在,使用它,而不是创建新的
  • 状态存在,使用它,而不是创建新的

并在单个查询中完成。

如果状态与以前的调用不同,我将创建新的操作节点。所以我最终得到了多个相同的动作节点。

    query =  "merge (:state {id:%s})-[:q {q:%s}]->(:action {id:%s})" % (state, 0, action)

我使用半径图。


唯一的方法是使用 3 个查询而不是 1 个来实现此目的:

graph.query mem 'merge (:state {id:9})'
graph.query mem 'merge (:action {id:9})'
graph.query mem 'match (s:state), (a:action) where s.id = 9 and a.id = 9 create (s)-[:q {q:0.3}]->(a)' 
4

1 回答 1

2

目前 RedisGraph 不支持混合 MATCH 和 MERGE 子句,因此除了拆分查询之外没有太多选择,一个建议是将这三个查询包装在 MULTI EXEC 中:

MULTI
graph.query mem 'merge (:state {id:9})'
graph.query mem 'merge (:action {id:9})'
graph.query mem 'match (s:state), (a:action) where s.id = 9 and a.id = 9 create (s)-[:q {q:0.3}]->(a)'
EXEC

这应该会加快速度,一旦 MATCH 和 MERGE 可以混合,我们将在这里更新。

于 2019-04-16T06:43:06.790 回答