是否可以通过 REST API 和 return 节点的 URI 使用 Cypher 查询 Neo4J 数据库?
Is it possible to query a Neo4J db using Cypher, via the REST API, and return the URI of a node?
背景:
我正在使用本地 运行 Neo4J 实例(位于 localhost:7474),并通过 Java 适配器访问它,该适配器通过 REST API(使用 Jersey),并使我的 Grails 应用程序可以访问数据 运行ning 在同一台服务器上。
问题:
是否可以通过 REST API 和 return 节点的 URI 使用 Cypher 查询 Neo4J 数据库?现在,我可以检查 Neo4J 服务器状态、创建节点、填充节点属性、查询和创建关系。
我的问题是我的 "add relationship" 和遍历代码需要一个节点 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,我使用的 "add relationship" 代码就可以工作。我的代码基于此处的 addRelationship() 代码:
在您的情况下,您可以通过将节点内部 ID 附加到以下 url 来自己创建节点 uri:
http://localhost:7474/db/data/node/your-123-id
也许您想在配置文件中设置方案、主机和数据库端口,以便在更改数据库位置时不进行硬编码更改。
在您的 JSON 结果中,每个 "user" 的 self
属性 值将是其 URI。
In this example, 响应有 2 "n" 个节点,每个节点的 self
属性 值是它的 URI。
Here is an example 如何获得交易端点(通常比遗留端点更简洁)return self
属性.
背景:
我正在使用本地 运行 Neo4J 实例(位于 localhost:7474),并通过 Java 适配器访问它,该适配器通过 REST API(使用 Jersey),并使我的 Grails 应用程序可以访问数据 运行ning 在同一台服务器上。
问题:
是否可以通过 REST API 和 return 节点的 URI 使用 Cypher 查询 Neo4J 数据库?现在,我可以检查 Neo4J 服务器状态、创建节点、填充节点属性、查询和创建关系。 我的问题是我的 "add relationship" 和遍历代码需要一个节点 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,我使用的 "add relationship" 代码就可以工作。我的代码基于此处的 addRelationship() 代码:
在您的情况下,您可以通过将节点内部 ID 附加到以下 url 来自己创建节点 uri:
http://localhost:7474/db/data/node/your-123-id
也许您想在配置文件中设置方案、主机和数据库端口,以便在更改数据库位置时不进行硬编码更改。
在您的 JSON 结果中,每个 "user" 的 self
属性 值将是其 URI。
In this example, 响应有 2 "n" 个节点,每个节点的 self
属性 值是它的 URI。
Here is an example 如何获得交易端点(通常比遗留端点更简洁)return self
属性.