Ich habe eine Frage zum effizienten Filtern von Suchergebnissen basierend auf einer Eigenschaft einer Beziehung.Neo4j Cypher Filtern von Beziehungen nach Gewicht auf großen Maßstab
Ich habe ein Diagramm wie folgt aus:
(: PERSON) - [: WORKED_WITH {Gewicht: 30}] -> (: PERSON)
mit über 300.000 Knoten markierten Person und über 15.000.000 Kanten beschriftet: WORKED_WITH (jede hat ein ganzzahliges Gewicht).
Jetzt zum Beispiel möchte ich die 10 Knoten-Kombinationen mit dem höchsten Gewicht zwischen ihnen haben. Also meine Frage wie folgt aussieht:
MATCH (n:PERSON)-[r:WORKED_WITH]->(m:PERSON)
RETURN n.name, m.name, r.weight
ORDER BY r.weight DESC
LIMIT 10;
Wie ich kürzlich las es nicht möglich ist, einen Index für eine Eigenschaft einer Beziehung zu erstellen. Ich lese, dass Sie Knoten für Partitionen wie < 50, 50-100,> 100 als Beispiel erstellen können, aber das fühlt sich nicht wie Best Practice an ... Gibt es eine Möglichkeit, etwas zu verwenden, das sich wie ein Index (Ungleichheit) verhält? Oder wie würden Sie diese Art von Problemen effizient lösen?
Grüße Wolfgang
Vielen Dank für Ihre Antwort, ich schon, dass die Post lesen, aber nicht glaubte, es trifft genau mein Problem ... –
Das Problem Ihr Einstiegspunkt in das Diagramm ist. Wenn ich deine Erklärung gut verstehe (korrigiere mich wenn nicht), ist der einzige bestimmende Faktor die Eigenschaft auf der Beziehung. Wenn ja, sind Ihre Möglichkeiten begrenzt (wenn Sie wollen, dass die Dinge schnell sind). –
Ich möchte nicht das Datenmodell für jede neue Aufgabe ändern ... Ich dachte an etwas wie zwingen Neo4j intern basierend auf dieser Eigenschaft zu sortieren ... Also ich könnte leicht sagen rel.weight> 50 oder zwischen 30 und 50 .... Ich werde später einen Jaccard-Koeffizienten verwenden, der noch schwieriger zu splitten wäre ... –