neo4j学习总结

neo4j学习
一、载入基本实体信息(参考链接:https://neo4j.com/developer/guide-import-csv/)
(1)LOAD CSV
# 在线导入name.basics.csv 
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///name.basics.csv" AS row
CREATE (p:Person { nconst: row.nconst, birthYear: toInteger(row.birthYear), deathYear: toInteger(row.deathYear), primaryProfession: row.primaryProfession, knownForTitles: row.knownForTitles})

# 尝试2 —— merge的时候如果有null会出现问题
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///name.basics.csv" AS row
MERGE (p:Person { nconst: row.nconst, birthYear: row.birthYear, deathYear: row.deathYear, primaryProfession: row.primaryProfession})
WITH p, row
WHERE NOT p.primaryProfession AND p.birthYear AND p.deathYear IS NULL
UNWIND split(row.knownForTitles, ',') AS title
MERGE (t:Title {name: title})
MERGE (p)-[r:ACT]->(t)

# 尝试2解决方案(https://stackoverflow.com/questions/37081842/cant-merge-with-null-values-cannot-merge-node-using-null-property-value-in-n):
# SPLIT列表作为node的解决方案(https://stackoverflow.com/questions/37109997/neo4j-split-string-and-get-position)
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///name.basics.test.csv" AS row
MERGE (p:person { nconst: row.nconst, primaryName: row.primaryName, birthYear: row.birthYear, deathYear: row.deathYear, primaryProfession: row.primaryProfession})
WITH SPLIT(row.knownForTitles, ',') AS title, line
UNWIND RANGE(0, SIZE(SWords)-1) as i 
MERGE (p)-[r:ACT {position:i+1}]->(t:name {name: SWords[i]}) 

# 建立索引
CREATE INDEX ON :Person(PersonID);

# 建立索引并添加一个约束
CREATE CONSTRAINT ON (o:Person) ASSERT o.PersonID IS UNIQUE;


# 在线导入title.ratings.csv
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///title.ratings.csv" AS row
CREATE (T:Title { tconst: row.tconst, averageRating: row.averageRating, numVotes: toInteger(row.numVotes)})

# 建立索引
CREATE INDEX ON :Title(TitleID);

# 建立索引并添加一个约束
CREATE CONSTRAINT ON (o:Title) ASSERT o.TitleID IS UNIQUE;

(2)neo4j-admin import
shell命令行:
../bin/neo4j-admin import --database orders
     --nodes=Customer=customers.csv
     --nodes=products.csv
     --nodes=Order="orders_header.csv,orders1.csv,orders2.csv"
     --relationships=CONTAINS=order_details.csv
     --relationships=ORDERED="customer_orders_header.csv,orders1.csv,orders2.csv"
     --trim-strings=true


二、建立关联
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///products.csv" AS row
MATCH (product:Product {productID: row.ProductID})
MATCH (category:Category {categoryID: row.CategoryID})
MERGE (product)-[:PART_OF]->(category);

参考链接——neo4j创建节点之间的关系:https://blog.csdn.net/fuhanghang/article/details/89373429

# 导入加建立关联
LOAD CSV WITH HEADERS FROM "file:///name.basics.test.csv" AS row
WITH SPLIT(row.knownForTitles, ',') AS title, row
MERGE (p:person { nconst: row.nconst, primaryName: row.primaryName, birthYear: row.birthYear, deathYear: row.deathYear, primaryProfession: row.primaryProfession})
MERGE (t:title {name: title})
CREATE (p)-[r:ACT]->(t)

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///title.ratings.test.csv" AS line
MERGE (T:Title { tconst: line.tconst, averageRating: line.averageRating, numVotes: toInteger(line.numVotes)})
MERGE (T)-[r:SAMEAS]->(t)

三、查询
# 查询基本节点信息
MATCH (n:Title) RETURN n LIMIT 25

# 查询某个标签的所有节点的指定属性
match (p:Person) return p.born limit 10

# 查询符合条件的某个person节点
match (p:Person) where p.born>=1960 return p limit 2
match (p:Person) where p.name='Tom Hanks' return p
match (p:Person { name:'Tom Hanks' } ) return p


四、删除(参考链接:https://www.jianshu.com/p/59bd829de0de
# 删除 Relationship Types
match (n)-[r:PLAYED]-()
detach delete r

# 删除 Node Labels
MATCH (n:Title) DELETE n

# 删除某类节点的所有关系
MATCH (n:Title)-[r]-() DELETE n,r 

五、insert导入图谱代码成功案例
LOAD CSV WITH HEADERS  FROM "file:///person.csv" AS line
CREATE (n: person{id:line.id,name:line.name})

LOAD CSV WITH HEADERS  FROM "file:///movies.csv" AS line
CREATE (n: movie{id:line.id,title:line.title,country:line.country,year:line.year})

LOAD CSV WITH HEADERS FROM "file:///roles.csv" AS line
MATCH (entity1: person{id:line.personId}), (entity2: movie{id:line.movieId})
CREATE (entity1)-[:PLAYED{role:line.role}]->(entity2)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值