getRelationships并不总是返回关系

时间:2015-11-03 15:24:03

标签: java neo4j

根据我检索节点的方式,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中双击它没有任何反应,则不显示任何关系。

Graph 1

如果我复制此节点的lot_id并仅针对该节点运行查询,那么当我双击节点时,关系会回来:match (n:Lot) where n.lot_id="someLotId" return n limit 1;

enter image description here

1 个答案:

答案 0 :(得分:2)

我猜您的数据集存在问题。

确保lot_idsystem返回的节点实际上是相同的节点。 可能由于导入问题导致数据集损坏。

Todo清单: - 对数据集使用约束 - 使用merge,确保数据库中有单个节点