使用事务性Cypher REST端点创建索引

时间:2016-01-07 11:43:55

标签: neo4j cypher

我是否应该使用separate URL在Neo4j中创建模式索引,或者我是否应该使用事务性Cypher enpoint(db/data/transaction/commit)?

我问这个的原因是我得到了

Neo.TransientError.Transaction.DeadlockDetected,LockClient[3] can't wait on resource RWLock[SCHEMA(0), hash=833390523] since => LockClient[3] <-[:HELD_BY]- RWLock[SCHEMA(0), hash=833390523] <-[:WAITING_FOR]- LockClient[2] <-[:HELD_BY]- RWLock[SCHEMA(0), hash=833390523]

提交简单查询时

CREATE INDEX ON :Person(name)

到空数据库(版本2.3.1)。重新启动并重新创建Neo4j数据库并没有帮助。

更新:经过额外调查后,我意识到只有当我同时并行发送两个CREATE INDEX命令时才会返回错误。顺序运行它们可以正常工作。

1 个答案:

答案 0 :(得分:1)

您绝对可以使用事务端点来创建索引。

我已成功使用httpie客户端运行它:

http -a neo4j:<mypw> -b -j localhost:7474/db/data/transaction/commit \
 statements:='[{"statement": "create index on :Person(name)"}]'

请注意,在同一交易中无法执行create index操作和变更内容(CREATEMERGESET,...)。

请查看data/graph.db/messages.log以获得进一步的见解。

关于您的更新

索引操作会锁定,因此无法并行运行。