通过Neo4j rest api发送的数据不会被持久化

时间:2016-11-24 19:41:23

标签: neo4j cypher data-storage neo4jrestclient

我正在使用Neo4j rest api来创建具有更多节点和关系的图形结构。我使用以下cypher查询格式在一个帖子请求中发送一批节点及其关系。

UNWIND [[0,1], [0,6309]] AS pair
MATCH (n {name: pair[0]}), (m {name: pair[1]})
CREATE (n)-[:X]->(m)

我正在从1GB大小的文件中读取数据,并将数据批量上传到neo4j。我收到了我发送的所有请求的响应代码200,但是当我检查{$NEO4J_HOME}/data/databases/graph.db大小时,它只显示244K大小。 graph.db中的du -hc *store.db*命令也显示所有nodestore.db,relationshipstore.db和propertystore.db大小都是0.为什么通过rest api上传的数据不会被写入图表DB中的文件?任何帮助将受到高度赞赏。

du -hc *store.db*

的输出
0       neostore.nodestore.db
4.0K    neostore.nodestore.db.id
8.0K    neostore.nodestore.db.labels
4.0K    neostore.nodestore.db.labels.id
0       neostore.propertystore.db
8.0K    neostore.propertystore.db.arrays
4.0K    neostore.propertystore.db.arrays.id
4.0K    neostore.propertystore.db.id
8.0K    neostore.propertystore.db.index
4.0K    neostore.propertystore.db.index.id
8.0K    neostore.propertystore.db.index.keys
4.0K    neostore.propertystore.db.index.keys.id
0       neostore.relationshipstore.db

这是使用泽西客户端发送到neo4j rest api的完整请求。

Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(user, password));
WebResource cypherResource = client.resource("http://localhost:7474/db/data/cypher");
ClientResponse cypherResponse = cypherResource.accept(MediaType.APPLICATION_JSON)
            .type(MediaType.APPLICATION_JSON_TYPE).entity(query).post(ClientResponse.class);

示例查询设置为实体:

{"query":"UNWIND [[0,1], [0,6309]] AS pair
MATCH (n {name: pair[0]}), (m {name: pair[1]}) CREATE (n)-[:X]->(m)"}

1 个答案:

答案 0 :(得分:0)

我被REST上下文跟踪,实际上查询在任何上下文中都不起作用(REST API,Neo4j浏览器,neo4j-shell等)。

根据所有文件的大小,数据库中没有或节点的任何关系。您的查询首先在节点上匹配:因为没有任何内容,所以CREATE子句永远不会被执行。

要创建不存在的节点,然后创建关系,您需要使用MERGE而不是MATCH。您还应该在节点上设置标签,并且为了性能和正确性,在name属性上为该标签创建unicity constraint(它将同时创建索引):

CREATE CONSTRAINT ON (n:Node) ASSERT n.name IS UNIQUE;

然后:

UNWIND [[0,1], [0,6309]] AS pair
MERGE (n:Node {name: pair[0]})
MERGE (m:Node {name: pair[1]})
CREATE (n)-[:X]->(m)

(或者如果文件中可能存在重复对,也可以使用MERGE

您是否了解LOAD CSV Cypher子句,即使您手动批量配对,也可以比远程查询更快地导入数据?