[英]Neo4j cypher MATCH query not working
我在嵌入式graphDb
Label Student上創建了以下索引
Schema schema = graphDb.schema();
indexDefinition = schema.indexFor(DynamicLabel.label("Student")).on("NodeType").create();
indexDefinition = schema.indexFor(DynamicLabel.label("Student")).on("Marks").create();
在使用密碼MATCH查詢時
這樣工作: match (n:Student) return n;
這也適用: match (n:Student) where n.Marks<30 return n;
但是,這失敗了: match (n:Student) where n.Marks=30 return n;
這也是: match (n:Student) where n.Marks='30' return n;
奇怪的是,這一項有效:
start n=node(127) match (n:Student) where n.Marks=30 return n;
作品:我得到了預期的結果,失敗:沒有結果
任何人都可以解釋這種行為,因為所有屬性都已經被索引(標簽),並且密碼應該返回期望的結果。
我還使用以下命令檢查了標簽的屬性是否已編入索引:
Label label1 = DynamicLabel.label("Student");
System.out.println(schema.getIndexes(label1));
我正在使用這種方法執行密碼查詢。
[編輯]節點創建:
Integer marks = 30;
Label label = DynamicLabel.label("Student");
tx = graphDb.beginTx();
Node studentNode = graphDb.createNode(label);
studentNode.setProperty("NodeType", "Student");
studentNode.setProperty("Marks", marks);
tx.success();
這樣就可以了,請參閱以下代碼段。 您的腳本有什么不同?
final GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase();
final ExecutionEngine cypher = new ExecutionEngine(graphDb);
try (Transaction tx = graphDb.beginTx()) {
Schema schema = graphDb.schema();
//schema.indexFor(DynamicLabel.label("Student")).on("NodeType").create();
schema.indexFor(DynamicLabel.label("Student")).on("marks").create();
Label label1 = DynamicLabel.label("Student");
System.out.println(schema.getIndexes(label1));
tx.success();
}
try (Transaction tx = graphDb.beginTx()) {
Node node = graphDb.createNode(DynamicLabel.label("Student"));
node.setProperty("marks", 20);
node = graphDb.createNode(DynamicLabel.label("Student"));
node.setProperty("marks", 30);
node = graphDb.createNode(DynamicLabel.label("Student"));
node.setProperty("marks", 40);
System.out.println(cypher.execute("match (n:Student) return n").dumpToString());
System.out.println(cypher.execute("match (n:Student) where n.marks<30 return n;").dumpToString());
System.out.println(cypher.execute("match (n:Student) where n.marks=30 return n;").dumpToString());
System.out.println(cypher.execute("match (n:Student) where n.marks='30' return n;").dumpToString());
tx.success();
}
腳本輸出:
[IndexDefinition[label:Student, on:marks]]
+-------------------+
| n |
+-------------------+
| Node[0]{marks:20} |
| Node[1]{marks:30} |
| Node[2]{marks:40} |
+-------------------+
3 rows
+-------------------+
| n |
+-------------------+
| Node[0]{marks:20} |
+-------------------+
1 row
+-------------------+
| n |
+-------------------+
| Node[1]{marks:30} |
+-------------------+
1 row
+---+
| n |
+---+
+---+
0 row
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.