Je cherche à importer beaucoup de noms de fichiers dans une base de données graphique, en utilisant Neo4j. Les données proviennent d'une source externe et sont disponibles dans un fichier CSV. Je voudrais créer une structure arborescente à partir des données, afin que je puisse facilement «naviguer» dans la structure dans les requêtes plus tard (c'est-à-dire trouver tous les fichiers sous un certain répertoire, tous les fichiers se trouvant dans plusieurs répertoires etc.Quelle est la bonne façon d'importer une structure de répertoire/fichier dans Neo4j à partir du fichier CSV?
Ainsi, compte tenu de l'entrée exemple:
/foo/bar/example.txt
/bar/baz/another.csv
/example.txt
/foo/bar/onemore.txt
J'aimerais le créer le graphique suivant:
(/) <-[:in]- (foo) <-[:in]- (bar) <-[:in]- (example.txt)
<-[:in]- (onemore.txt)
<-[:in]- (bar) <-[:in]- (baz) <-[:in]- (another.csv)
<-[:in]- (example.txt)
(où chaque étiquette de noeud est en fait un attribut, par exemple chemin :).
J'ai réussi à obtenir l'effet désiré en utilisant un nombre fixe de niveaux de répertoires; par exemple lorsque chaque fichier est à trois niveaux de profondeur, je pourrais créer un fichier CSV avec 4 colonnes:
dir_a,dir_b,dir_c,file
foo,bar,baz,example.txt
foo,bar,ban,example.csv
foo,bar,baz,another.txt
et l'importer en utilisant une requête Cypher:
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)
Mais je voudrais avoir une solution générale qui fonctionne pour n'importe quel niveau de sous-répertoires (et combinaisons de niveaux dans un ensemble de données). Notez que je suis en mesure de pré-traiter mon entrée si nécessaire, afin que je puisse créer une structure souhaitable dans le fichier CSV d'entrée.
J'ai regardé des gists ou des plugins, mais je n'arrive pas à trouver quelque chose qui fonctionne. Je pense/espère que je devrais être capable de faire quelque chose avec la fonction split(), à savoir utiliser split ('/', row.path) pour obtenir une liste d'éléments de chemin, mais je ne sais pas comment traiter cette liste en une chaîne d'opérations MERGE.