2013-03-08 59 views
0

我已经创建了一个Java项目这样一个嵌入式的Neo4j:的Cypher查询找不到节点

graphDb = new GraphDatabaseFactory() 
      .newEmbeddedDatabaseBuilder("db") 
      .setConfig(GraphDatabaseSettings.node_keys_indexable, "movieId, userId, rating, genre") 
      .setConfig(GraphDatabaseSettings.node_auto_indexing, "true") 
      .newGraphDatabase(); 

我已验证创建了索引,并且它有我所期望的名字:

Index<Node> index = graphDb.index().forNodes("movieId"); 
System.out.println("::: Verify Index Name :::"); 
System.out.println(index.getName()); 

控制台显示:

::: Verify Index Name ::: 
movieId 

我可以使用Java API

找到节点
ReadableIndex<Node> graphDbIndex = graphDb.index().getNodeAutoIndexer().getAutoIndex(); 
Node movie = graphDbIndex.get("movieId", 2).getSingle(); 
System.out.println("::: Get with Java API Result :::"); 
System.out.println("MovieId: " + movie.getProperty("movieId")); 
System.out.println("Title: " + movie.getProperty("title")) 

控制台显示

::: Get with Java API Result ::: 
MovieId: 2 
Title: Jumanji (1995) 

但是,当我尝试用暗号是这样的结果

ExecutionEngine engine = new ExecutionEngine(graphDb); 
ExecutionResult result = engine.execute("start movie=node:movieId(movieId='2') return movie, movie.title"); 
System.out.println("::: get with Cypher Result :::"); 
System.out.println(result); 

控制台显示

::: get with Cypher Result ::: 
+---------------------+ 
| movie | movie.title | 
+---------------------+ 
+---------------------+ 
0 row 
8 ms 

我做得非常错误或我只是错过了一些明显的东西?

谢谢。

+0

我想你混淆了索引的名字是'node_auto_index'索引的属性名'“movieId,用户id,分级,流派”'。 – 2013-03-10 09:10:24

回答

3

id是一个字符串吗?尝试像这样与Lucene索引语法:

start movie=node:node_auto_index('movieId:2') 
return movie, movie.title 
+0

尝试了您的建议,但仍返回0行'movieId:2'。 movieId值是长类型。 – C0deAttack 2013-03-08 01:02:25

+0

哦,我看到你正在使用自动索引器...更新了我的答案。 – 2013-03-08 01:04:46

+1

啊!谢谢,我现在有预期的结果。你能解释为什么'movieId:2'有效,但是movieId ='2'不正确吗? – C0deAttack 2013-03-08 01:06:51

相关问题