0

我正在尝试将 Java API 用于 Neo4j,但我似乎被困在 IndexHits 中。如果我使用 Cypher 查询数据库

START n=node:types(type="Process") RETURN n;

我得到了“进程”类型的所有 2087 个节点。

在我的应用程序中,我有以下几行

Index<Node> nodeIndex = db.index().forNodes("types");
IndexHits<Node> hits = nodeIndex.get("type", "Process");
System.out.println("Node index size: " + hits.size());

这导致我的控制台吐出一个值 0。这里, db 当然是GraphDatabaseService.

我期望一个包含所有 2087 个节点的对象。我究竟做错了什么?

这个.size()问题只是我迭代器的前奏

 for(Node process : hits) { ... }

但是当 hits.size() == 0 时这并不多。根据http://api.neo4j.org/1.9.2/org/neo4j/graphdb/index/IndexHits.html这应该是可能的,只要有中的东西hits

在此先感谢您的帮助。

4

1 回答 1

1

我想到了。哥们,我觉得好丢人...

碰巧我已经将 DB_PATH 设置为我的默认数据文件夹,而默认存储文件夹是默认数据文件夹加上 graph.db。当我尝试从更正后的 DB_PATH 运行代码时,我收到一条错误消息,指出由于 Neo4j 服务器正在运行,因此锁定文件已到位。关闭后它工作得很好。

因此,如果您碰巧看到以下错误,只需停止服务器并再次运行代码:

Caused by: org.neo4j.kernel.StoreLockException: Could not create lock file at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:74) at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:40) at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:491)

我在几个论坛上发现你不能同时运行 Neo4j 服务器并使用 Java API 来查询它。

于 2013-08-21T07:51:03.067 回答