Neo4j查询语句写法举例
# -*- coding: utf-8 -*-frompy2neoimportGraph,Node,Relationship,NodeMatcher#版本说明:Py2neo v4classNeo4j_Handle():graph=Nonematcher=Nonedef__init__(self):print("Neo4j Init ...")defconnectDB(self):self.graph=Graph("bolt: // localhost:7687",username="neo4j",password="zhangzl")self.matcher=NodeMatcher(self.graph)#实体查询,用于命名实体识别:品牌+车系+车型defmatchEntityItem(self,value):answer=self.graph.run("MATCH (entity1) WHERE entity1.name = \""+value+"\" RETURN entity1").data()returnanswer#实体查询defgetEntityRelationbyEntity(self,value):#查询实体:不考虑实体类型,只考虑关系方向answer=self.graph.run("MATCH (entity1) - [rel] -> (entity2) WHERE entity1.name = \""+value+"\" RETURN rel,entity2").data()if(len(answer)==0):#查询实体:不考虑关系方向answer=self.graph.run("MATCH (entity1) - [rel] - (entity2) WHERE entity1.name = \""+value+" \" RETURN rel,entity2").data()print(answer)returnanswer#关系查询:实体1deffindRelationByEntity1(self,entity1):#基于品牌查询answer=self.graph.run("MATCH (n1:Bank {name:\""+entity1+"\"})- [rel] -> (n2) RETURN n1,rel,n2").data()#基于车系查询,注意此处额外的空格if(len(answer)==0):answer=self.graph.run("MATCH (n1:Serise {name:\""+entity1+" \"})- [rel] - (n2) RETURN n1,rel,n2").data()returnanswer#关系查询:实体2deffindRelationByEntity2(self,entity1):#基于品牌answer=self.graph.run("MATCH (n1)<- [rel] - (n2:Bank {name:\""+entity1+"\"}) RETURN n1,rel,n2").data()if(len(answer)==0):#基于车系answer=self.graph.run("MATCH (n1) - [rel] - (n2:Serise {name:\""+entity1+" \"}) RETURN n1,rel,n2").data()returnanswer#关系查询:实体1+关系deffindOtherEntities(self,entity,relation):answer=self.graph.run("MATCH (n1:Bank {name:\""+entity+"\"})- [rel:Subtype {type:\""+relation+"\"}] -> (n2) RETURN n1,rel,n2").data()returnanswer#关系查询:关系+实体2deffindOtherEntities2(self,entity,relation):print("findOtherEntities2==")print(entity,relation)answer=self.graph.run("MATCH (n1)- [rel:RELATION {type:\""+relation+"\"}] -> (n2:Bank {name:\""+entity+"\"}) RETURN n1,rel,n2").data()if(len(answer)==0):answer=self.graph.run("MATCH (n1)- [rel:RELATION {type:\""+relation+"\"}] -> (n2:Serise {name:\""+entity+" \"}) RETURN n1,rel,n2").data()returnanswer#关系查询:实体1+实体2(注意Entity2的空格)deffindRelationByEntities(self,entity1,entity2):#品牌 + 品牌answer=self.graph.run("MATCH (n1:Bank {name:\""+entity1+"\"})- [rel] -> (n2:Bank{name:\""+entity2+" \"}) RETURN n1,rel,n2").data()if(len(answer)==0):#品牌 + 系列answer=self.graph.run("MATCH (n1:Bank {name:\""+entity1+"\"})- [rel] -> (n2:Serise{name:\""+entity2+" \"}) RETURN n1,rel,n2").data()if(len(answer)==0):#系列 + 品牌answer=self.graph.run("MATCH (n1:Serise {name:\""+entity1+"\"})- [rel] -> (n2:Bank{name:\""+entity2+" \"}) RETURN n1,rel,n2").data()if(len(answer)==0):#系列 + 系列answer=self.graph.run("MATCH (n1:Serise {name:\""+entity1+"\"})- [rel] -> (n2:Serise{name:\""+entity2+" \"}) RETURN n1,rel,n2").data()returnanswer#查询数据库中是否有对应的实体-关系匹配softdeffindEntityRelation(self,entity1,relation,entity2):answer=self.graph.run("MATCH (n1:Bank {name:\""+entity1+"\"})- [rel:subbank {type:\""+relation+"\"}] -> (n2:Bank{name:\""+entity2+"\"}) RETURN n1,rel,n2").data()if(len(answer)==0):answer=self.graph.run("MATCH (n1:Bank {name:\""+entity1+"\"})- [rel:subbank {type:\""+relation+"\"}] -> (n2:Serise{name:\""+entity2+"\"}) RETURN n1,rel,n2").data()if(len(answer)==0):answer=self.graph.run("MATCH (n1:Serise {name:\""+entity1+"\"})- [rel:subbank {type:\""+relation+"\"}] -> (n2:Bank{name:\""+entity2+"\"}) RETURN n1,rel,n2").data()if(len(answer)==0):answer=self.graph.run("MATCH (n1:Serise {name:\""+entity1+"\"})- [rel:subbank {type:\""+relation+"\"}] -> (n2:Serise{name:\""+entity2+"\"}) RETURN n1,rel,n2").data()returnanswer