根据我检索节点的方式,getRelationships
方法将返回所有关系(预期)或没有关系(错误)。
Neo4j 2.2.6版。使用Java API。
: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;
然后我得到我的单个Lot,但是如果我在GUI中双击它没有任何反应,则不显示任何关系。
如果我复制此节点的lot_id并仅针对该节点运行查询,那么当我双击节点时,关系会回来:match (n:Lot) where n.lot_id="someLotId" return n limit 1;
答案 0 :(得分:2)
我猜您的数据集存在问题。
确保lot_id
和system
返回的节点实际上是相同的节点。
可能由于导入问题导致数据集损坏。
Todo清单:
- 对数据集使用约束
- 使用merge
,确保数据库中有单个节点