2

たとえば、トランザクションで作成された 2 つのノードがあるとします。

node1 = db.graphDb.createNode();
node2 = db.graphDb.createNode();

// index user id
node1.setProperty("abc", "fkdjasflasdjlf");
db.nodeIndex.add(node1, "abc", "fkdjasflasdjlf");

node1 にはプロパティ「abc」がありますが、node2 にはありません。

次に、プロパティ「abc」が「fkdjasflasdjlf」に等しいすべてのノードをリストするように、ノードに対してクエリを実行しようとしました。

ExecutionResult result = engine.execute("START n=node(*) WHERE n.abc = 'fkdjasflasdjlf' return n ");

Neo4j が例外を生成する

Exception in thread "main" org.neo4j.cypher.EntityNotFoundException: The property 'abc' does not exist on Node[0]
at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:35)
at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:29)
at org.neo4j.cypher.internal.commands.Equals.isMatch(ComparablePredicate.scala:60)
at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$createResults$1.apply(FilterPipe.scala:29)
at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$createResults$1.apply(FilterPipe.scala:29)
at scala.collection.Iterator$$anon$22.hasNext(Iterator.scala:390)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at org.neo4j.cypher.PipeExecutionResult.hasNext(PipeExecutionResult.scala:138)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at scala.collection.JavaConversions$IteratorWrapper.hasNext(JavaConversions.scala:562)
at neo4j.TestNodeSearch.main(TestNodeSearch.java:59)
    Caused by: org.neo4j.graphdb.NotFoundException: 'abc' property not found for NodeImpl#0.
at       
    org.neo4j.kernel.impl.core.Primitive.newPropertyNotFoundException(Primitive.java:184)
at org.neo4j.kernel.impl.core.Primitive.getProperty(Primitive.java:179)
at org.neo4j.kernel.impl.core.NodeImpl.getProperty(NodeImpl.java:52)
at org.neo4j.kernel.impl.core.NodeProxy.getProperty(NodeProxy.java:155)
at org.neo4j.cypher.internal.commands.expressions.Property.apply(Property.scala:33)

「異なるタイプ」のノードをサポートする方法はありますか、または現在、1 つのタイプのノードのみがサポートされていますか?

どうもありがとう!

4

3 に答える 3

3

機能を使用する必要がありHASます。

ExecutionResult result = engine.execute("START n=node(*) WHERE HAS(n.abc) AND n.abc = 'fkdjasflasdjlf' return n ");
于 2013-05-06T19:44:08.130 に答える