1

次のサイファークエリを実行しようとしています(neoclipseからOKを実行します)

START a=node(*)   MATCH a-[:Knows]->p   WHERE (p.Firstname! = "Steve" )   RETURN p

次のステートメントを含む neo4jclient から

protected void Populate()
    {
        var client = new GraphClient(new Uri("http://altdev:7474/db/data"));
        client.Connect();

        var query = client.Cypher
            .Start(new RawCypherStartBit("all", "node(*)"))
            .Match("all-[:Knows]->p")
            .Where((Person p) => p.Firstname == "Steve")
            .Return<Node<Person>>("Person");

        var people = query.Results;
 }

クライアントは次のように例外をスローします

The query was: START all=node(*)
MATCH all-[:Knows]->p
WHERE (p.Firstname! = {p0})
RETURN Person

The response status was: 400 Bad Request

The response from Neo4j (which might include useful detail!) was: {
  "message" : "Unknown identifier `Person`.",
  "exception" : "SyntaxException",
  "fullname" : "org.neo4j.cypher.SyntaxException",
  "stacktrace" : [ "org.neo4j.cypher.internal.symbols.SymbolTable.evaluateType(SymbolTable.scala:59)", "org.neo4j.cypher.internal.commands.expressions.Identifier.evaluateType(Identifier.scala:47)", "org.neo4j.cypher.internal.commands.expressions.Expression.throwIfSymbolsMissing(Expression.scala:52)", "org.neo4j.cypher.internal.pipes.ColumnFilterPipe$$anonfun$throwIfSymbolsMissing$1.apply(ColumnFilterPipe.scala:61)", "org.neo4j.cypher.internal.pipes.ColumnFilterPipe$$anonfun$throwIfSymbolsMissing$1.apply(ColumnFilterPipe.scala:61)", "scala.collection.immutable.List.foreach(List.scala:309)", "org.neo4j.cypher.internal.pipes.ColumnFilterPipe.throwIfSymbolsMissing(ColumnFilterPipe.scala:61)", "org.neo4j.cypher.internal.pipes.PipeWithSource.<init>(Pipe.scala:63)", "org.neo4j.cypher.internal.pipes.ColumnFilterPipe.<init>(ColumnFilterPipe.scala:30)", "org.neo4j.cypher.internal.executionplan.builders.ColumnFilterBuilder.handleReturnClause(ColumnFilterBuilder.scala:60)", "org.neo4j.cypher.internal.executionplan.builders.ColumnFilterBuilder.apply(ColumnFilterBuilder.scala:38)", "org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.prepareExecutionPlan(ExecutionPlanImpl.scala:54)", "org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.<init>(ExecutionPlanImpl.scala:36)", "org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:80)", "org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:80)", "org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:37)", "org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:80)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)", "org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)", "org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)", "java.lang.reflect.Method.invoke(Method.java:616)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ]
}

ご覧のとおり、基本的にクエリは同じです。そして、私が取得しようとしているノードは _type "Person" です

ティア

マルセロ

4

3 に答える 3

1

あなたのMATCH句では、アイデンティティを使用しますp

.Match("all-[:Knows]->p")          // becomes MATCH all-[:Knows]->p

あなたのRETURN句では、アイデンティティを使用するように変更しますPerson

.Return<Node<Person>>("Person");   // becomes RETURN person

いずれかを選択し、一貫性を保つ必要があります。

他のクリーンアップも統合すると、完全なクエリは次のようになります。

   var query = client.Cypher
        .Start(new { all = All.Nodes })
        .Match("all-[:Knows]->p")
        .Where((Person p) => p.Firstname == "Steve")
        .Return<Person>("p");
于 2013-08-05T20:29:51.953 に答える
0

Cypher コードの作成方法、具体的には何を返すかにかかっています。

var query = client.Cypher
    .Start(new RawCypherStartBit("all", "node(*)"))
    .Match("all-[:Knows]->p")
    .Where((Person p) => p.Firstname == "Steve")
    .Return<Node<Person>>("p"); // <-- THIS LINE SHOULD SAY 'P' NOT 'Person'

return ステートメントでは、定義したノードと同じ名前にする必要があります。したがって、次を使用します: all-[:knows]->pwhere you define p. 今、あなたはそれを返す必要があります。

(これはピーターが彼の答えで言っていることです:))

于 2013-08-05T20:31:45.983 に答える
0

クエリ内のどこにも割り当てられていない Person ノードを返そうとしています。

于 2013-08-05T19:08:51.043 に答える