Ich habe recently asked about how to find all paths between two types os nodes in a way where all the edges in the path had the same attribute (wie die gleiche ID). Das wäre so etwas wie:Suche nach bestimmten Pfad in Neo4j schnell
MATCH (a {type: 'cin1'})-[rels:Next*1.. {value: 1}]->(b {type: 'cancer'})
RETURN (a), (b)
wo statt Wert aufweist: für alle Kanten: 1 I Wert haben würde.
fand ich einen Weg, dies wie dies durch den Einsatz etwas zu lösen (wie in meiner anderen Frage beantwortet):
MATCH (a:Label {type: 'cin1'})
MATCH (b:Label {type: 'cancer'})
MATCH shortestPath((a)-[rels:Next*1..20]->(b))
WHERE ALL(r in tail(rels) WHERE (head(rels)).value = r.value)
RETURN (a), (b)
Das Problem ist, ich habe, dass dieser Ansatz alle möglichen unterschiedlichen Pfaden erstellen, um erste dann filtere sie, was in meinem Fall exponentiell viele Wege schafft. Nehmen wir zum Beispiel die folgende Grafik
Der Ansatz gegeben werden alle Pfade ersten Spiel:
id:1 -> id:1 -> id:1
id:1 -> id:2 -> id:1
id:1 -> id:1 -> id:2
id:1 -> id:2 -> id:2
id:1 -> id:2 -> id:3
...
Und nur dann diese Optionen filtern, um zurückzukehren 1-> 1-> 1, 2-> 2-> 2, 3-> 3-> 3 und so weiter. Daher stellt sich heraus, dass dieser Ansatz sehr unwirksam ist, und ich frage mich, ob es einen einfacheren Weg gibt.
Gibt es eine Möglichkeit, Ihre Beziehungen zu optimieren? Im Moment nehme ich an, dass alle dasselbe Label mit unterschiedlichen Attributen verwenden. Können Sie sie stattdessen in Etiketten umwandeln, oder ist das nicht möglich? – InverseFalcon
ist nicht machbar:/im Grunde haben Sie zu viele von ihnen –
Ich hatte Angst davor. Obwohl ich Ihre Leistungsprobleme verstehe, frage ich mich, ob Sie dies in einem Beispiel-Dataset ausgeführt haben, um zu bestätigen, dass die Leistung wirklich ein Problem darstellt. Ich nehme an, Sie haben einen riesigen Datensatz mit einem ziemlich massiven Netz von Verbindungen? – InverseFalcon