Повторное использование узла вместо создания новых?

Я пытаюсь создать пару (действие)->(состояние) таким образом, чтобы, если:

  • действие существует, используйте его вместо создания нового
  • государство существует, используйте его вместо создания нового

и сделать это в одном запросе.

Тот, который у меня есть, создает новый узел действия, если состояние отличается от предыдущих вызовов. Таким образом, я получаю несколько одинаковых узлов действия.

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

Я использую Radis-Graph.


Единственный способ - использовать 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)' 

1 ответ

В настоящее время 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

Это должно ускорить процесс, мы обновим здесь, как только МАТЧ и MERGE могут быть смешаны.

Другие вопросы по тегам