Повторное использование узла вместо создания новых?
Я пытаюсь создать пару (действие)->(состояние) таким образом, чтобы, если:
- действие существует, используйте его вместо создания нового
- государство существует, используйте его вместо создания нового
и сделать это в одном запросе.
Тот, который у меня есть, создает новый узел действия, если состояние отличается от предыдущих вызовов. Таким образом, я получаю несколько одинаковых узлов действия.
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 могут быть смешаны.