我正在尝试使用Neo4j的Java API,但我似乎陷入了IndexHits。如果我用Cypher使用
查询数据库START n=node:types(type="Process") RETURN n;
我得到所有类型为“Process”的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
中存在某些内容,这应该是可能的。
提前感谢您的帮助。
答案 0 :(得分: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同时查询它。