簡體   English   中英

Neo4j密碼匹配查詢不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM