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

Data sent via Neo4j rest api does not get persisted

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

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 没有写入图形数据库中的文件?任何帮助将不胜感激。

来自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

这是使用 jersey 客户端发送到 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)"}

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

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

要创建尚不存在的节点,然后创建关系,您需要在 name 属性 上为该标签使用 MERGE instead of MATCH. You should also set a label on the nodes, and for performance and correctness, create a 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 子句,即使您手动批量配对,它也可以比远程查询更快地导入数据?