Neo4J:执行嵌入在Java进程中的SET / CREATE Cypher查询

时间:2015-10-09 08:20:43

标签: java neo4j cypher

我想在Java进程中执行cypher查询(link)。

这适用于所有查询,例如MATCH xyz RETURN n,但每当我想执行和编写执行CREATESET之类的操作时,都会抛出异常:

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);

参考图书馆:

  • 的Neo4j一致性检查-2.2.5.jar
  • 的Neo4j-CSV-2.2.5.jar
  • 的Neo4j-CYPHER-2.2.5.jar
  • 的Neo4j-CYPHER编译-1.9-2.0.4.jar
  • 的Neo4j-CYPHER编译-2.0-2.0.4.jar
  • 的Neo4j-CYPHER编译-2.1-2.1.8.jar
  • 的Neo4j-CYPHER编译-2.2-2.2.5.jar
  • 的Neo4j-图的ALGO-2.2.5.jar
  • 的Neo4j-图形匹配-2.2.5.jar
  • 的Neo4j导入刀具2.2.5.jar
  • 的Neo4j-IO-2.2.5.jar
  • 的Neo4j-JMX-2.2.5.jar
  • 的Neo4j-内核2.2.5.jar
  • 的Neo4j-lucene的折射率-2.2.5.jar
  • 的Neo4j原语的集合-2.2.5.jar
  • lucene的核 - 3.6.2.jar
  • org.apache.servicemix.bundles.jline-0.9.94_1.jar
  • 的Neo4j壳2.2.5.jar
  • 的Neo4j-UDC-2.2.5.jar
  • 的Neo4j不安全-2.2.5.jar

1 个答案:

答案 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)。