背景:
我正在使用一个本地运行的Neo4J实例(在localhost:7474),并通过一个Java适配器访问它,该适配器通过REST API(使用Jersey)使用Cypher,并使我的Grails应用程序可以在其上运行数据服务器
问题:
是否可以通过REST API使用Cypher查询Neo4J数据库,并返回节点的URI?现在,我可以检查Neo4J服务器状态,创建节点,填充节点属性,查询和创建关系。 我的问题是我的#34;添加关系"和遍历代码需要一个节点URI作为输入。我可以查询节点并获取描述结果的正确JSON,但我似乎无法获取URI位置。
以下是我的getUserByEmail代码的简化版本:
public URI getUserByEmail( String email )
{
System.out.println( "GETTING USER BY EMAIL [" + email + "]..." );
String queryStr = "MATCH (user) WHERE user.nodetype=\'user\' and user.email=\'" + email + "\' RETURN user";
WebResource webResource = client.resource( ROOT_URI + "/transaction/commit" );
String payload = "{\"statements\" : [ {\"statement\" : \"" + queryStr + "\"} ]}";
ClientResponse response = webResource
.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.entity( payload )
.post( ClientResponse.class );
String responseStr = response.getEntity( String.class );
URI responseLocation = response.getLocation();
System.out.println( "RESPONSE STRING: " + responseStr );
System.out.println( "GOT USER AT: [" + responseLocation + "]" );
return responseLocation;
}
JSON结果很好地反映了图表数据库中的内容。但是,该位置始终为空。
"添加关系"我使用的代码有效,只要我有起始节点的URI。我的代码基于生活在这里的addRelationship()代码:
答案 0 :(得分:2)
在您的情况下,您可以通过将节点内部标识附加到以下网址来自行创建节点:
http://localhost:7474/db/data/node/your-123-id
您可能希望在配置文件中设置方案,主机和数据库端口,以便在更改数据库位置时不进行硬编码更改。
答案 1 :(得分:2)
在您的JSON结果中,每个"用户"的self
属性值将是它的URI。
In this example,响应有2" n"节点,每个节点的self
属性值都是它的URI。
Here is an example如何获取事务端点(通常比传统端点更简洁)也返回self
属性。