J'ai un graphique d'étiquettes qui sont liées entre elles. Mon but est de créer une requête Cypher, qui retournera toutes les balises qui sont liées à un tableau de balises d'entrée via 1 ou 2 sauts.Neo4j correspond à des noeuds liés à tous les noeuds de la collection
J'ai fait une requête, qui ne fonctionne pas comme prévu.
MATCH (t:Tag)
WHERE t.name IN ["A", "B", "C"]
WITH t
MATCH (a:Tag)-[:RELATED*1..2]-(t)
RETURN DISTINCT a;
Cette requête trouve d'abord les noeuds A
, B
, C
puis recherche les étiquettes, qui sont liés à A
, B
ouC
via 1 nœud ou moins.
Ce que je veux faire bien est de trouver des balises, qui sont liés aux trois noeuds (A
, B
etC
).
Je sais que je pourrais concaténer MATCH
et WITH
déclarations, et faire quelque chose comme ceci:
MATCH (t:Tag)-[:RELATED*1..2]-(a:Tag)
WHERE t.name="A"
WITH DISTINCT a
MATCH (t:Tag)-[:RELATED*1..2]-(a)
WHERE t.name="B"
WITH DISTINCT a
MATCH (t:Tag)-[:RELATED*1..2]-(a)
WHERE t.name="C"
...
RETURN DISTINCT a;
Mais il fonctionne très lent, lorsque le nombre d'étiquettes d'entrée augmentation (dans ce cas seulement 3 entrée étiquettes: A
, B
, C
).
Y a-t-il un moyen de le faire en une seule requête, comme lors de mon premier essai?
Est-il important d'utiliser une collection de noms de point en entrée, par opposition à plusieurs noms de points individuels? – jjaderberg