标签:数据库 图形 neo4j cypher
由于RDF数据库需要,需要调研图形数据库,选择了Neo4J进行尝试,发现它包含了一个名为“Cypher”的操作语言,使用了一下感觉非常不错,所有有写点东西的必要。
从官网上盗个图:
其实,这个图也就标识了cypher语言的基本功能,节点a到节点b,关系是LIKES,其操作的方法与sql的select一样选择符合某种条件的实体,由此强烈建议大家使用网页版进行熟悉操作,比较直观,可以直接得到图形。
闲话少说,我们姑且成上面的为万能公式,该万能公式大体上分为两个部分()与[],其中()表示某个节点可以当作是关系数据库中的某条记录或者RDF中的实体,[]表是某种关系,从而创建了实体与实体之间的关系;
之后根据万能公式完成匹配和其他的操作,关键词Match Return。
Match(a) Return a,含义表示返回所有的节点,其中a就是定义变量的方式;
Match(a:Person) Return a,返回所有Person类别的节点,其中Person类型在节点创建的过程中进行指定;
Match(a:Person:Teacher) Return a,返回所有Teacher同时属于Person类别的节点(例子有点不恰当),从这个例子我们可以看出例子我们可以看出只要你想的到多少类别都可以;
除此之外,我们可以通过create创建节点;
create (:Person {name:"李晨"}),创建一个名为李晨的节点;
create (fan:Person {name:"范冰冰"}) return fan,创建一个名为范冰冰的节点,并返回,从这个里面我们可以看到类型前面可以变量,需要说明的是即使你不加类型依然可以进行声明;
Match(li:Person {name:"李晨"}) Match(fan:Person {name:"范冰冰"}) create (fan) -[:搞定]->(li) return fan,li,完成了关系,范冰冰 搞定 李晨;
最后,还需要说明的一个是shortestPath,顾名思义查找最短路径,熟悉RDF的大概都能了解Relfinder功能,两者功能类似,白话来讲就是,找到一个小A和小B,他们之间有没有关系呢,就是通过shortestPath方法来实现,起就是都过关系来规定几度关系来进行推断;
Match(a:Person {name:"小A"}) Match(b:Person {name:"小B"}) p= shortpath((a) -[:朋友*..2]->(b)) return a,b,p,返回所有小A和小B之间能产生二度以内好友关系的可能路径。
初探Neo4J中的Cypher
标签:数据库 图形 neo4j cypher
原文地址:http://blog.csdn.net/hanyueqi/article/details/45371533