万盛集团网站建设,云南高端网站建设公司,苏州网站开发公司济南兴田德润o厉害吗,wordpress怎么设计网站Neo4j 文章目录 Neo4jCQL结点和关系增删改查匹配语句 根据标签匹配节点根据标签和属性匹配节点删除导入数据目前的问题菜谱解决的问题 命令行窗口 neo4j.bat console 导入rdf格式的文件
:GET /rdf/ping
CALL n10s.graphconfig.init(); //初始化
call n10s.rdf.import.fetch( //初始化
call n10s.rdf.import.fetch(file:///F:\\wow.rdf,Turtle)// 导入注意斜杠///(本地文件需要用这个)清空所有数据
这里要注意的是因为不存在孤立的关系所以若要删除一个带关系的节点需要同时删除该节点所有的关系。
即若要删除路径(a)-[d]-(b)-[e]-(c) 中的 ab 节点则需要同时删除关系 de。
因此若要清空数据库即删除所有的节点和关系可以先使用 MATCH 找到所有的节点再使用 OPTIONAL MATCH 查询节点是否存在关系最后将其全部删除。
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,rreturn
因为 CREATE 命令可以允许不跟 RETURN 同时使用若使用了 RETURN才会返回 Graph 界面
CQL
Neo4j的Cypher语言是为处理图形数据而构建的CQL代表Cypher查询语言。像Oracle数据库具有查询 语言SQLNeo4j具有CQL作为查询语言。
结点和关系
Cypher 采用一对圆括号 () 来表示节点如 (n:角色) 表示一个 角色 节点n 是变量名供命令执行时用 n 来访问这个节点在命令执行完毕后就无法使用了。同时单独的 () 表示一个匿名节点在匹配时表示匹配所有节点。
在关系中
-- 表示无方向的关系-- 表示有方向的关系-[r]- 则给关系赋予一个变量名方便对这个关系进行操作-[r:配偶]- 匹配关系为 配偶 的类型
增删改查
//建立结点
create(n:Person{name:小江,sex:男}) return n
//建立关系 小江是小王的爸爸
MATCH(a:Person{name:小江}),(b:Person{name:小王})Merge(a)-[r:爸爸]-(b)
//创建节点的时候就建立好关系
CREATE (a:Person {name:苗同学})-[r:朋友]-(b:Person {name:叶同学})
//修改 把name是小王的name改成小江
Match (a:Person{name:小王})set a.name小江
//搜索 信息是大学生的返回改结点
match(a:Person{info:大学生}) return a
//在一个结点中建立新的属性,在名字为小陈这个结点添加info属性
match (a:Person{name:小陈}) set a.info小学生
//删除结点的某个属性
match (a:Person{name:小陈}) remove a.info
//删除关系
match(a:Person{name:小陈})-[r:爸爸]-(b:Person{name:江}) delete r
//删除结点 To delete this node, you must first delete its relationships.删除结点前要先删除关系
match (a:Person{name:小江}) delete a merge与create的区别
可以认为 MERGE MATCH CREATE因此在对图数据进行添加时若想要跳过已存在的节点或关系使用 MERGE 命令若不关心重复节点或关系则使用 CREATE 命令
匹配语句 根据标签匹配节点 //匹配所有角色节点
match (n:角色) return n根据标签和属性匹配节点
// 匹配 name 为 郭靖 的 角色 节点
match (n:角色{name:郭靖}) return n删除
Neo4j 中有两种删除方法DELETE 和 REMOVE。DELETE 用于删除节点和关系REMOVE 用于删除节点和关系的标签与属性。两者都需要配合 MATCH先匹配到内容再执行操作。
删除节点
若要删除节点则需要删除与节点相关的所有边这与图论一致——不存在没有节点的边。 因此要删掉金轮法王这个节点就先需要找到该节点和所在关系再进行删除
match(n:角色{name:王重阳})-[r]-() delete n,r导入数据 load csv with headers from file:///data\\射雕三部曲.csv as line
match (book:作品),(person:角色),(skill:武功)wherebook.name in split(line.作品, ) andperson.name line.人物 andskill.name in split(line.武功, )
optional match (father:角色)wherefather.name line.父
optional match (mother:角色)wheremother.name line.母
optional match (spouse:角色)wherespouse.name line.配偶
optional match (sect:门派)wheresect.name line.门派
optional match (children:角色)wherechildren.name in split(line.子女, )
optional match (master:角色)wheremaster.name in split(line.师傅, )
merge (person)-[:所在作品]-(book)
merge (person)-[:师傅]-(master)
merge (person)-[:武功]-(skill)
merge (person)-[:父]-(father)
merge (person)-[:母]-(mother)
merge (person)-[:配偶]-(spouse)
merge (person)-[:所在门派]-(sect)
merge (person)-[:子女]-(children)目前的问题
1.高血压最重要的营养素是钾和钠但是我们之前那个数据里面是没有钾元素的
两个数据分开建图是可以的但是合起来不行欸
我的想法是先建立原料和营养的图然后再建立菜和原料的图如果这个原料有的话就连接过去
可以建立类别然后富含的话可以放在钾元素那里还有少量放在钠元素其他的话要有含量吧写在关系中吗
菜谱
load csv with headers from file:///data\\export.csv as line
merge(n:食物{name:line.食物名,kind:line.分类}) return ncreate(n:营养素{name:钠}) return n //建立营养素解决的问题
1.新版的python连接图数据库的写法
网上很多都是这个但是我会报错
graph Graph(http://localhost:7474, usernameroot, password123456)原因是python版本问题下面这个是正确的写法
graph Graph(http://localhost:7474, auth(neo4j, 123456))2.报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaa in position
就是编码方式的问题
with open(D:\\neo4j-community-4.4.14-windows\\neo4j-community-4.4.14\\import\\data\\export.csv, r,encodingutf-8) as f:最后要加上encondingutf-8’就可以了
match (a:nutrients)-[:富含]-(b:recipe_matrial{name:生菜})-[:include]-(c:recipe) return a,b,cmatch (a:recipe{name:蚂蚁上树})-[:include]-(b:recipe_matrial)-[:have]-(c) return a,b,cmatch(a:食材{name:{foodName}})-[:推荐食用]-(b:疾病) return a,b查找钵钵鸡的所有关系但是只有一层
match (n:recipe{name:蚂蚁上树})--(b) return n,b两层关系
match (n:recipe{name:蚂蚁上树})--(b)--(c) return n,b,cmatch n(x:recipe)-[*1..2]-() where x.name钵钵鸡 return n如果是直接通过菜找营养素的话就没有钠含量了
如果通过菜找食材再找营养素的话这两个数据是分开的有些食材在另一个数据里是没有的 if question_type disease_cause:sql [MATCH (m:Disease) where m.name {0} return m.name, m.cause.format(i) for i in entities]