Neo4j是一个图数据库,图数据库的设计目的是用于存储和处理各种多维度的关系。比如常见的社交图谱等。下面是一个个体Neo4j的REST API来进行图结构操作的例子。
下载解压:
在这里下载:download
$ tar xfz neo4j-community-1.4.M04-unix.tar.gz $ rm neo4j-community-1.4.M04-unix.tar.gz $ cd neo4j-community-1.4.M04/
启动Neo4j
#可以按需要修改配置文件 $ nano conf/neo4j-server.properties #启动 $ ./bin/neo4j start Starting Neo4j Server... Waiting for Neo4j Server..... 7/4/11 7:07:13 PM org.neo4j.server.database.Database INFO: Using database at NEO4J/neo4j-community-1.4.M04/data/graph.db 7/4/11 7:07:13 PM org.neo4j.server.modules.DiscoveryModule INFO: Mounted discovery module at [/] Adding JAXRS packages [org.neo4j.server.rest.discovery] at [/] Adding JAXRS packages [org.neo4j.server.rest.web] at [/db/data] Adding JAXRS packages [org.neo4j.server.webadmin.rest] at [/db/manage] 7/4/11 7:07:13 PM org.neo4j.server.modules.RESTApiModule INFO: Mounted REST API at [/db/data/] 7/4/11 7:07:13 PM org.neo4j.server.modules.ManagementApiModule INFO: Mounted management API at [/db/manage/] 7/4/11 7:07:13 PM org.neo4j.server.modules.WebAdminModule INFO: Mounted webadmin at [/webadmin] 7/4/11 7:07:13 PM org.neo4j.server.NeoServerWithEmbeddedWebServer INFO: Starting Neo Server on port [7474] 7/4/11 7:07:13 PM org.neo4j.server.web.Jetty6WebServer INFO: Mounting static content at [/webadmin] from [webadmin-html] 7/4/11 7:07:15 PM org.neo4j.server.NeoServerWithEmbeddedWebServer INFO: Server started on [http://okazaki:7474/] running: PID:2816
访问根目录
$ curl -D - -H Accept:application/json "http://localhost:7474/db/data/" HTTP/1.1 200 OK Content-Length: 410 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) { "relationship_index" : "http://localhost:7474/db/data/index/relationship", "node" : "http://localhost:7474/db/data/node", "relationship_types" : "http://localhost:7474/db/data/relationship/types", "extensions_info" : "http://localhost:7474/db/data/ext", "node_index" : "http://localhost:7474/db/data/index/node", "reference_node" : "http://localhost:7474/db/data/node/0", "extensions" : { }
创建一个数据节点:
$ curl -D - -H Accept:application/json -X POST http://localhost:7474/db/data/node HTTP/1.1 201 Created Content-Length: 968 Location: http://localhost:7474/db/data/node/2 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) { "outgoing_relationships" : "http://localhost:7474/db/data/node/2/relationships/out", (...)
设置节点的各种属性:
$ curl -D - -H Content-Type:application/json -X PUT \ -d '{"name":"Charles Darwin","birthDate":"1809-02-12","deathDate":"1882-04-19","knownFor":["Voyage of the Beagle","On the Origin of Species evolution by natural selection"]}' \ http://localhost:7474/db/data/node/2/properties HTTP/1.1 204 No Content Access-Control-Allow-Origin: * Server: Jetty(6.1.25)
查看设置好的节点信息:
$ curl -D - -H Accept:application/json http://localhost:7474/db/data/node/2HTTP/1.1 200 OK Content-Length: 1166 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) { "outgoing_relationships" : "http://localhost:7474/db/data/node/2/relationships/out", "data" : { "knownFor" : [ "Voyage of the Beagle", "On the Origin of Species evolution by natural selection" ], "name" : "Charles Darwin", "birthDate" : "1809-02-12", "deathDate" : "1882-04-19" }, "traverse" : "http://localhost:7474/db/data/node/2/traverse/{returnType}", "all_typed_relationships" : "http://localhost:7474/db/data/node/2/relationships/all/{-list|&|types}", "property" : "http://localhost:7474/db/data/node/2/properties/{key}", "self" : "http://localhost:7474/db/data/node/2", "properties" : "http://localhost:7474/db/data/node/2/properties", "outgoing_typed_relationships" : "http://localhost:7474/db/data/node/2/relationships/out/{-list|&|types}", "incoming_relationships" : "http://localhost:7474/db/data/node/2/relationships/in", "extensions" : { }, "create_relationship" : "http://localhost:7474/db/data/node/2/relationships", "all_relationships" : "http://localhost:7474/db/data/node/2/relationships/all", "incoming_typed_relationships" : "http://localhost:7474/db/data/node/2/relationships/in/{-list|&|types}" }
仅查看节点属性:
$ curl -H Accept:application/json http://localhost:7474/db/data/node/2/properties { "knownFor" : [ "Voyage of the Beagle", "On the Origin of Species evolution by natural selection" ], "name" : "Charles Darwin", "birthDate" : "1809-02-12", "deathDate" : "1882-04-19" }
将创建节点和设置属性合到一步进行:
$ curl -D - -H Accept:application/json -H Content-Type:application/json -X POST -d '{"name":"Alfred Russel Wallace","birthDate":"1823-01-08","deathDate":"1913-11-07","knownFor":["natural selection","biogeography"]}' "http://localhost:7474/db/data/node" HTTP/1.1 201 Created Content-Length: 1127 Location: http://localhost:7474/db/data/node/3 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) { "outgoing_relationships" : "http://localhost:7474/db/data/node/3/relationships/out", "data" : { "knownFor" : [ "natural selection", "biogeography" ], "name" : "Alfred Russel Wallace", "birthDate" : "1823-01-08", "deathDate" : "1913-11-07" }, "traverse" : "http://localhost:7474/db/data/node/3/traverse/{returnType}", (...) }
设置某一个属性:
$ curl D - -H Accept:application/json -H Content-Type:application/json -X PUT \ -d '"United Kingdom"' \ "http://localhost:7474/db/data/node/3/properties/citizenship" HTTP/1.1 204 No Content Access-Control-Allow-Origin: * Server: Jetty(6.1.25) $ curl -H Accept:application/json http://localhost:7474/db/data/node/3/properties{ "knownFor" : [ "natural selection", "biogeography" ], "name" : "Alfred Russel Wallace", "citizenship" : "United Kingdom", "birthDate" : "1823-01-08", "deathDate" : "1913-11-07" }
删除节点:
$ curl -D - -H Accept:application/json -X POST http://localhost:7474/db/data/node HTTP/1.1 201 Created Content-Length: 968 Location: http://localhost:7474/db/data/node/4 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) $ curl -D - -X DELETE http://localhost:7474/db/data/node/4 HTTP/1.1 204 No Content Access-Control-Allow-Origin: * Server: Jetty(6.1.25)
创建一个Darwin认识Wallace的关系:
$ curl -D - -H Accept:application/json -H Content-Type:application/json -X POST -d '{"type":"KNOWS","to":"http://localhost:7474/db/data/node/3","data":{"ref":"http://en.wikipedia.org/wiki/Charles_Darwin"}}' "http://localhost:7474/db/data/node/2/relationships" HTTP/1.1 201 Created Content-Length: 439 Location: http://localhost:7474/db/data/relationship/0 Content-Encoding: UTF-8 Content-Type: application/json Access-Control-Allow-Origin: * Server: Jetty(6.1.25) { "start" : "http://localhost:7474/db/data/node/2", "data" : { "ref" : "http://en.wikipedia.org/wiki/Charles_Darwin" }, "self" : "http://localhost:7474/db/data/relationship/0", "property" : "http://localhost:7474/db/data/relationship/0/properties/{key}", "properties" : "http://localhost:7474/db/data/relationship/0/properties", "type" : "KNOWS", "extensions" : { }, "end" : "http://localhost:7474/db/data/node/3" }
#获取这个关系的相关信息
$ curl -H Content-Type:application/json "http://localhost:7474/db/data/relationship/0/properties" { "ref" : "http://en.wikipedia.org/wiki/Charles_Darwin" }
为这个关系设置属性:
$ curl -D - -H Content-Type:application/json -X PUT -d '"Darwin received a letter from Wallace asking if the book would examine human origins"' "http://localhost:7474/db/data/relationship/0/properties/comment" HTTP/1.1 204 No Content Access-Control-Allow-Origin: * Server: Jetty(6.1.25) $ curl -H Content-Type:application/json "http://localhost:7474/db/data/relationship/0/properties" { "ref" : "http://en.wikipedia.org/wiki/Charles_Darwin", "comment" : "Darwin received a letter from Wallace asking if the book would examine human origins" }
获取关系类型列表:
$ curl -H Content-Type:application/json "http://localhost:7474/db/data/relationship/types" ["KNOWS"]
获取关系列表:
#from Darwin $ curl -H Content-Type:application/json "http://localhost:7474/db/data/node/2/relationships/out/KNOWS" [ { "start" : "http://localhost:7474/db/data/node/2", "data" : { "ref" : "http://en.wikipedia.org/wiki/Charles_Darwin", "comment" : "Darwin received a letter from Wallace asking if the book would examine human origins" }, "self" : "http://localhost:7474/db/data/relationship/0", "property" : "http://localhost:7474/db/data/relationship/0/properties/{key}", "properties" : "http://localhost:7474/db/data/relationship/0/properties", "type" : "KNOWS", "extensions" : { }, "end" : "http://localhost:7474/db/data/node/3" } ] #in to Darwin $ curl -H Content-Type:application/json "http://localhost:7474/db/data/node/2/relationships/in/KNOWS" [ ] #out from wallace $ curl -H Content-Type:application/json "http://localhost:7474/db/data/node/3/relationships/out/KNOWS" [ ] #all from/to wallace $ curl -H Content-Type:application/json "http://localhost:7474/db/data/node/3/relationships/all/KNOWS" [ { "start" : "http://localhost:7474/db/data/node/2", "data" : { "ref" : "http://en.wikipedia.org/wiki/Charles_Darwin", "comment" : "Darwin received a letter from Wallace asking if the book would examine human origins" }, "self" : "http://localhost:7474/db/data/relationship/0", "property" : "http://localhost:7474/db/data/relationship/0/properties/{key}", "properties" : "http://localhost:7474/db/data/relationship/0/properties", "type" : "KNOWS", "extensions" : { }, "end" : "http://localhost:7474/db/data/node/3" } ]
shutdown服务器:
$ ./bin/neo4j stop Stopping Neo4j Server... 7/4/11 7:09:30 PM org.neo4j.server.NeoServerBootstrapper INFO: Neo4j Server shutdown initiated by kill signal 7/4/11 7:09:30 PM org.neo4j.server.NeoServerWithEmbeddedWebServer INFO: Successfully shutdown Neo Server on port [7474] Waiting for Neo4j Server to exit... Stopped Neo4j Server.