由于RDF数据库需要,需要调研图形数据库,选择了Neo4J进行尝试,发现它包括了1个名为“Cypher”的操作语言,使用了1下感觉非常不错,所有有写点东西的必要。
从官网上盗个图:
其实,这个图也就标识了cypher语言的基本功能,节点a到节点b,关系是LIKES,其操作的方法与sql的select1样选择符合某种条件的实体,由此强烈建议大家使用网页版进行熟习操作,比较直观,可以直接得到图形。
闲话少说,我们姑且成上面的为万能公式,该万能公式大体上分为两个部份()与[],其中()表示某个节点可以当作是关系
数据库中的某条记录或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:"李晨"}),创建1个名为李晨的节点;
create (fan:Person {name:"范冰冰"}) return fan,创建1个名为范冰冰的节点,并返回,从这个里面我们可以看到类型前面可以变量,需要说明的是即便你不加类型仍然可以进行声明;
Match(li:Person {name:"李晨"}) Match(fan:Person {name:"范冰冰"}) create (fan) -[:弄定]->(li) return fan,li,完成了关系,范冰冰 弄定 李晨;
最后,还需要说明的1个是shortestPath,顾名思义查找最短路径,熟习RDF的大概都能了解Relfinder功能,二者功能类似,白话来说就是,找到1个小A和小B,他们之间有无关系呢,就是通过shortestPath方法来实现,起就是都过关系来规定几度关系来进行推断;
Match(a:Person {name:"小A"}) Match(b:Person {name:"小B"}) p= shortpath((a) -[:朋友*..2]->(b)) return a,b,p,返回所有小A和小B之间能产生2度之内好友关系的可能路径。