我想在Java进程中执行cypher查询(link)。
这适用于所有查询,例如MATCH xyz RETURN n
,但每当我想执行和编写执行CREATE
或SET
之类的操作时,都会抛出异常:
Exception in thread "main" org.neo4j.graphdb.QueryExecutionException: The given query is not supported at the moment in the selected cost-based planner
at org.neo4j.kernel.impl.query.QueryExecutionKernelException.asUserException(QueryExecutionKernelException.java:35)
at org.neo4j.kernel.InternalAbstractGraphDatabase.execute(InternalAbstractGraphDatabase.java:970)
at org.neo4j.kernel.InternalAbstractGraphDatabase.execute(InternalAbstractGraphDatabase.java:957)
at MainClass.embTestQuery(MainClass.java:85)
at MainClass.main(MainClass.java:28)
代码片段:
matchingQuery = "CREATE (n:testnode) RETURN n";
try ( Transaction ignored = db.beginTx();
Result result =
db.execute( matchingQuery ))
{
while ( result.hasNext() )
{
Map<String,Object> row = result.next();
for ( Entry<String,Object> column : row.entrySet() )
{
rows += column.getKey() + ": " + column.getValue() + "; ";
}
rows += "\n";
}
}
System.out.println(rows);
参考图书馆:
答案 0 :(得分:1)
问题来自您的密码规划器,在Neo4j's Documentation中,您可以了解密码查询的执行方式。
上面的句子正好显示了你的问题:
默认情况下,Neo4j 2.2将使用成本计划器进行某些查询,但不是全部。您可以使用query.planner.version配置设置(请参阅dbms.cypher.planner)强制它使用特定的规划器,或者使用CYPHER planner = cost或CYPHER planner = rule来提前查询。 Neo4j可能仍然没有使用您选择的计划程序 - 此时并非所有查询都可由成本计划程序解决。请注意,使用PLANNER COST或PLANNER RULE以便在计划程序之间切换已被弃用,并且将在以后的版本中停止工作。
要解决此问题,您只需在数据库配置文件中更改您的密码规划器(有关指南,请参阅dbms.cypher.planner documentation)。