Skip to content

Instantly share code, notes, and snippets.

@eliassoares
Created April 25, 2018 23:34
Show Gist options
  • Save eliassoares/1582414f26638a7be26cb813664b4c68 to your computer and use it in GitHub Desktop.
Save eliassoares/1582414f26638a7be26cb813664b4c68 to your computer and use it in GitHub Desktop.
Tutorial Neo4j
1° Configura os nós:
-Configurando o nó para busca:
CREATE INDEX ON :Person(personID);
CREATE INDEX ON :Person(name);
-Configurando a chave:
CREATE CONSTRAINT ON (p:Person) ASSERT p.personID IS UNIQUE;
#Um INDEX não pode ser usado como chave, caso o tenha feito, usa-se:
DROP INDEX ON :Person(name);
para retirar o index.
2º Após preparar os nodos, importamos os nodos do csv. Para importar um csv com nodos, com o nome "academic.csv", com as colunas "personID" e "name", usa-se os passos:
-Colocar o arquivo na pasta import do neo4j e descomentar a parte do arquivo e configuração que se trata disso.
-Usa-se o comando:
USING PERIODIC COMMIT 1000 LOAD CSV WITH HEADERS FROM "file:/academic.csv" AS csvLine CREATE (:Person {personID: csvLine.personID, name: csvLine.name});
-Para criar index de busca para linkar os relacionamentos, usa-se:
3º Configura as arestas:
-Para acrescentar os relacionamentos, em um csv com o nome de "relationships.csv", com as colunas "studentID", "teacherID" e "type" usa-se:
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:/relationships.csv" AS csvFile
MATCH (student:Person {personID: csvFile.studentID})
MATCH (teacher:Person {personID: csvFile.teacherID})
MERGE (student)-[:WAS_ORIENTED {type:csvFile.type}]->(teacher);
4º Caso seja necessário limpar o banco de dados, usa-se os comandos:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r;
#------------------------------------------------------------------------------------------------------#
-Código usado na minha máquina:
CREATE INDEX ON :Person(name);
CREATE INDEX ON :Person(first_name);
CREATE INDEX ON :Person(middle_name);
CREATE INDEX ON :Person(last_name);
CREATE CONSTRAINT ON (p:Person) ASSERT p.personID IS UNIQUE;
#USING PERIODIC COMMIT 50000 LOAD CSV WITH HEADERS FROM "file:///academic2.csv" AS csvLine CREATE (:Person {personID: csvLine.personID, name: csvLine.name, email: csvLine.email, webpage: csvLine.webpage, userID:csvLine.userID});
USING PERIODIC COMMIT 50000 LOAD CSV WITH HEADERS FROM "file:///lattes_academic_nodes_v6.csv" AS csvLine
OPTIONAL MATCH (p:personID {personID:csvLine.personID})
CREATE (:Person {personID: csvLine.personID, name: csvLine.full_name, last_name: csvLine.last_name, middle_name: csvLine.middle_name, first_name: csvLine.first_name, email: csvLine.email, webpage: csvLine.webpage, userID:csvLine.userID, original_baseID: csvLine.original_baseID});
USING PERIODIC COMMIT 50000
LOAD CSV WITH HEADERS FROM "file:///lattes_academic_relationship_v6.csv" AS csvFile
MATCH (student:Person {personID: csvFile.studentID})
MATCH (teacher:Person {personID: csvFile.teacherID})
MERGE (teacher)-[:SUPERVISED {type: csvFile.type, research_area: csvFile.research_area, research_sub_area: csvFile.research_sub_area, title: csvFile.title, year: csvFile.year, institution: csvFile.university_name}]->(student);
MATCH (a)-[r*]->() WHERE (a.last_name = 'benevenuto') RETURN r limit 300;
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MERGE (m:Movie {title:csv.title })
ON CREATE SET m.year = toInt(csv.year)
MERGE (k:Keyword {word:csv.word})
-No servidor parte é diferente, troca-se o "file:/academic2.csv" por "file:///academic2.csv":
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment