是否可以通过 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() 代码:

https://github.com/neo4j/neo4j/blob/2.1.6/community/server-examples/src/main/java/org/neo4j/examples/server/CreateSimpleGraph.java

在您的情况下,您可以通过将节点内部 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 属性.