是否可以通过REST API使用Cypher查询Neo4J数据库,并返回节点的URI?

时间:2015-02-04 13:52:00

标签: neo4j cypher

背景:

我正在使用一个本地运行的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()代码:

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

2 个答案:

答案 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属性。