Ich suche, viele Dateinamen in eine Diagrammdatenbank zu importieren, mit Neo4j. Die Daten stammen von einer externen Quelle und sind in einer CSV-Datei verfügbar. Ich würde gerne eine Baumstruktur aus den Daten erstellen, so dass ich später in Abfragen leicht die Struktur "durchnavigieren" kann (d. H. Finde alle Dateien unterhalb eines bestimmten Verzeichnisses, alle Dateien, die in mehreren Verzeichnissen vorkommen usw.).Wie kann man eine Verzeichnis-/Dateistruktur in Neo4j aus einer CSV-Datei importieren?
So, das Beispiel Eingabe gegeben:
/foo/bar/example.txt
/bar/baz/another.csv
/example.txt
/foo/bar/onemore.txt
Ich mag würde das folgende Diagramm erstellen:
(/) <-[:in]- (foo) <-[:in]- (bar) <-[:in]- (example.txt)
<-[:in]- (onemore.txt)
<-[:in]- (bar) <-[:in]- (baz) <-[:in]- (another.csv)
<-[:in]- (example.txt)
(wobei jeder Knoten-Label ist eigentlich ein Attribut, z.B. Pfad :).
Ich konnte den gewünschten Effekt erzielen, wenn ich eine feste Anzahl von Verzeichnisebenen verwende; zum Beispiel, wenn jede Datei auf drei Ebenen tief ist, konnte ich eine CSV-Datei mit 4 Spalten erstellen:
dir_a,dir_b,dir_c,file
foo,bar,baz,example.txt
foo,bar,ban,example.csv
foo,bar,baz,another.txt
Und es importieren, um eine Chiffre Abfrage:
LOAD CSV WITH HEADERS FROM "file:///sample.csv" AS row
MERGE (dir_a:Path {name: row.dir_a})
MERGE (dir_b:Path {name: row.dir_b}) <-[:in]- (dir_a)
MERGE (dir_c:Path {name: row.dir_c}) <-[:in]- (dir_b)
MERGE (:Path {name: row.file}) <-[:in]- (dir_c)
Aber ich möchte haben eine allgemeine Lösung, die für jede Ebene von Unterverzeichnissen (und Kombinationen von Ebenen in einer Datenmenge) funktioniert. Beachten Sie, dass ich meine Eingaben bei Bedarf vorverarbeiten kann, damit ich jede gewünschte Struktur in der Eingabe-CSV-Datei erstellen kann.
Ich habe Gists oder Plugins angeschaut, kann aber nichts finden, was funktioniert. Ich denke/hoffe, dass ich in der Lage sein sollte, etwas mit der Funktion split() zu tun, dh mit split ('/', row.path) eine Liste von Pfadelementen zu erhalten, aber ich weiß nicht, wie ich diese Liste verarbeiten soll eine Kette von MERGE-Operationen.