根据我检索节点的方式,getRelationships
方法将返回所有关系(预期)或不返回任何关系(错误)。
:schema
Indexes
ON :Lot(lot_id) ONLINE
ON :Lot(system) ONLINE
No constraints
lot_id 始终是唯一的。
系统只有大约 3 个唯一值,并非所有批处理都有系统属性。
返回关系的方法:
ResourceIterator<Node> r = graphDb.findNodes(LabelTypes.Lot, "lot_id", lot);
Map<String,Object> parms = new HashMap<String,Object>(); parms.put("lots", lots); Result r = graphDb.execute("MATCH (n:Lot) WHERE n.lot_id in {lots} return n;", parms);
不返回关系的方法:
-
ResourceIterator<Node> r = graphDb.findNodes(LabelTypes.Lot, "system", system);
-
Map<String,Object> parms = new HashMap<String,Object>(); parms.put("lotSystem", system); Result r = graphDb.execute("MATCH (n:Lot) WHERE n.system = {lotSystem} return n;", parms);
这种模式似乎是,如果我在 lot_id 上查询,我会得到关系,如果我在系统上查询,我不会得到任何关系。但不知道为什么。
来自 Neo4j GUI 的一些附加信息:
如果我运行此查询:match (n:Lot) where n.system="SAMPLE" return n limit 1;
然后我得到了我的单个批处理,但是如果我在 GUI 中双击它,什么也不会发生,也不会显示任何关系。
如果我复制此节点的 lot_id 并仅针对该节点运行查询,则当我双击该节点时,关系会恢复:match (n:Lot) where n.lot_id="someLotId" return n limit 1;
最佳答案
我猜您的数据集中有问题。
确保lot_id
和system
返回的节点确实是相同的节点。
可能由于导入问题,您的数据集已损坏。
待办事项列表:
- 对数据集使用约束
- 使用merge
,确保数据库中有单个节点
关于java - getRelationships 并不总是返回关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502839/