如何在Neo4j 2.2.3中确定关系的Max属性

时间:2015-07-08 13:52:33

标签: neo4j

如何快速获取所有关系实例的属性的最大值(或最小值)?您可以假设我正在运行此计算机的机器完全符合图形的CPU和内存大小的建议规范,并相应地设置堆大小。

事实:

  • 使用Neo4j v2.2.3
  • 只能通过我通过PHP或网络界面访问Cypher查询语言来修改图形 - 希望避免任何需要java编码的解决方案。
  • 我有一段关系,称之为likes,其中有一个属性为id的整数。
  • 这些关系大约有1亿,而且还在增长
  • 我每天从MySQL表中获取新的likes以添加到Neo4j中的图表
  • 关系属性id实际上是原始MySQL表中的主键(自动递增整数)。
  • 我只想添加新的likes所以在查询MySQL之前我想从id获得最大likes的新条目,所以我可以在我的SQL查询中使用它如SELECT * FROM likes_table WHERE id > max_neo4j_like_property_id

如何以最佳方式完成从neo4j获取max id属性?请指出任何索引所需的create语句以及用于获取最终结果的查询。

我尝试按如下方式创建索引:

 CREATE INDEX ON :likes(id);

索引在线后我尝试过:

 MATCH ()-[r:likes]-() RETURN r.i ORDER BY r.id DESC LIMIT 1

以及:

 MATCH ()-[r:likes]->() RETURN MAX(r.id) 

他们工作但是永远把他们搞砸了 ,因为两者的解释计划都表明没有使用索引。

更新:神圣$?@#$?!!!!看起来新的模式索引对于关系不起作用,即使您可以创建它们并使用:schema显示它们。它看起来似乎没有办法直接使用cypher创建传统索引,看起来他们可能解决了这个问题。

1 个答案:

答案 0 :(得分:2)

如果需要查询关系属性,通常是模型问题的标志。 对此查询的需求告诉您,您最好将这些属性提取到节点中,然后您就可以更快地进行查询。 我不是说这是100%的情况,但到目前为止看到同样问题的99%的人肯定已经证明了这种模式的关注。 你现在的模特是什么? 此外,您在查询中根本不使用标签,喜欢将节点绑定到节点。