Вернуть все узлы, косвенно связанные с центральным узлом - PullRequest
0 голосов
/ 30 мая 2020

enter image description here

Привет, ребята! Я работаю с python py2neo, и у меня проблемы с возвратом «COMPRAN ...» и «COMPRAS STREETW ...», которые, как вы можете видеть, косвенно связаны с «Оскаром» двумя ближайшими к «Оскару» нотами. Моя идея состоит в том, чтобы вернуть список со всеми узлами, относящимися к Oscar таким же образом, как связаны «COMPRAN ...» и «COMPRAS STREETW ...».

Я пытаюсь использовать следующий код:

lista = []
for record in db.run("MATCH (a:user)-[:watched]->(b:video), (b)-[:hasTag]->(c:tag), (b)-[:hasGenre]->(d:genre), (e:video)-[:hasGenre]->(d:genre), (e:video)-[:hasTag]->(c:tag) WHERE a.name = $name RETURN e.name UNION MATCH (a:user)-[:watched]->(b:video), (b)-[:hasGenre]->(d:genre), (e:video)-[:hasGenre]->(d:genre) RETURN e.name UNION MATCH (a:user)-[:watched]->(b:video), (b)-[:hasGenre]->(d:genre), (e:video)-[:hasTag]->(c:tag) RETURN e.name", name=name, video=video, tag=tag, genre=genre):
    lista.append(record["e.name"])
    return lista

Моя проблема в том, что он возвращает только узел с именем «COMPRAS STREETW ...», и я считаю, что запрос должен возвращать этот узел и «COMPRAN ...», поскольку они связаны косвенно на «Оскар». Спасибо за чтение и надеюсь, что вы поможете мне заставить это работать.

1 Ответ

0 голосов
/ 30 мая 2020

Этот код шифра должен найти оба желаемых узла:

MATCH
  (u:user)-[:watched]->(v1),
  (v1)-[:hasTag]->(t)<-[:hasTag]-(v2),
  (v1)-[:hasGenre]->(g)<-[:hasGenre]-(v2)
WHERE u.name = $name
RETURN v2.name
...