【问题标题】:Is it possible to query a Neo4J db using Cypher, via the REST API, and return the URI of a node?是否可以通过 REST API 使用 Cypher 查询 Neo4J 数据库,并返回节点的 URI?
【发布时间】:2015-04-04 01:50:38
【问题描述】:

背景:

我正在使用本地运行的 Neo4J 实例(在 localhost:7474),并通过一个 Java 适配器访问它,该适配器通过 REST API(使用 Jersey)使用 Cypher,并使我的 Grails 应用程序可以访问数据服务器。

问题:

是否可以通过 REST API 使用 Cypher 查询 Neo4J 数据库,并返回节点的 URI?现在,我可以检查 Neo4J 服务器状态、创建节点、填充节点属性、查询和创建关系。 我的问题是我的“添加关系”和遍历代码需要一个节点 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

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    在您的情况下,您可以通过将节点内部 id 附加到以下 url 来自己创建节点 uri:

    http://localhost:7474/db/data/node/your-123-id

    也许您想在配置文件中设置方案、主机和数据库端口,以便在更改数据库位置时不进行硬编码更改。

    【讨论】:

    • 从哪里获得内部 ID?我在 JSON 响应中得到的只是我在节点中创建的实际数据。
    • 匹配(n)返回id(n)
    【解决方案2】:

    在您的 JSON 结果中,每个“用户”的 self 属性值将是其 URI。

    In this example, 响应有 2 个“n”个节点,每个节点的 self 属性值就是它的 URI。

    Here is an example 了解如何获取事务端点(通常比旧端点更简洁)也返回 self 属性。

    【讨论】:

    • 该示例用于创建。我对查找节点的查询感兴趣。当我执行这样的查询时,我没有取回示例显示的所有广泛数据。我只是得到我创建的域级数据。也许我需要使用示例所做的端点,而不是事务密码端点?
    • 谢谢!看起来它会解决我的问题。今晚会试一试。澄清一下,该示例是否也适用于 MATCH 或仅适用于 CREATE 语句?
    • 是的。唯一重要的是 RETURN 子句的样子。
    猜你喜欢
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多