如何使用cypher对查询结果进行分页?

sun*_*nix 19 neo4j

是否可以对密码查询进行分页.例如,产品列表,但我不想显示/检索/缓存所有结果,因为我可以有很多结果.

我正在寻找类似于SQL中的偏移/限制的东西.

cypher跳过+限制+订单是一个很好的选择吗?http://docs.neo4j.org/chunked/stable/query-skip.html

tst*_*rms 19

SKIPLIMIT结合确实是要走的路.使用ORDER BY不可避免地使密码扫描与查询相关的每个节点.使用WHERE子句也是一样的.但性能不应该那么糟糕.

  • 一个挑剔:使用WHERE子句不一定会强制扫描每个节点.在找到符合指定条件的第一个"LIMIT x"节点后,Cypher仍将停止扫描(毕竟,为什么还需要读取其他内容?).你是正确的`ORDER BY`导致完整的扫描. (5认同)
  • 我不知道neo4j,但是对于大多数数据库(奇怪的是,许多工程师都不知道),执行分页查询时必须使用`ORDER BY`子句是非常强制性的:没有`ORDER BY` ,数据库实现可以随意以其认为必要的顺序返回结果(例如,性能等)。这意味着第2页的查询结果可能与第1页的结果没有任何连续性。@ ean5533您知道它在neo中如何工作吗? (2认同)
  • @LesHazlewood你是对的.答案取决于您的遍历是否可预测.SQL数据库可以返回随机排序结果的原因是因为数据页面因为性能目的而被洗牌.在neo4j的情况下,结果将受到neo4j遍历节点的顺序的影响,这可能是可预测的,具体取决于您的数据和查询.很难给出一般答案. (2认同)

小智 5

它像普通的sql一样,语法如下

match (user:USER_PROFILE)-[USAGE]->uUsage 
where HAS(uUsage.impressionsPerHour) AND (uUsage.impressionsPerHour > 100) 
ORDER BY user.hashID 
SKIP 10 
LIMIT 10; 
Run Code Online (Sandbox Code Playgroud)

此语法适用于上一版本(2.x)