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

Neo4j 如何使用cypher对查询结果进行分页?,neo4j,Neo4j,是否可以对cypher查询进行分页。例如,一个产品列表,但我不想显示/检索/缓存所有结果,因为我可以有很多结果 我正在寻找类似于SQL中的偏移量/限制的东西 cypher skip+limit+orderby是一个好的选择吗 跳过和限制结合起来确实是一条路要走。使用orderby不可避免地会使cypher扫描与查询相关的每个节点。使用WHERE子句也是一样的。性能应该不会那么差。与普通sql一样,语法如下 match (user:USER_PROFILE)-[USAGE]->uUsage

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

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


cypher skip+limit+orderby是一个好的选择吗

跳过
限制
结合起来确实是一条路要走。使用
orderby
不可避免地会使cypher扫描与查询相关的每个节点。使用
WHERE
子句也是一样的。性能应该不会那么差。

与普通sql一样,语法如下

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

这种语法适用于最新版本(2.x)

一个细节:使用WHERE子句不一定会强制扫描每个节点。在找到符合指定条件的第一个
LIMIT x
节点后,Cypher仍将停止扫描(毕竟,它为什么需要读取任何其他内容?)。你说的是正确的,
orderby
导致了完全扫描。对,这是有道理的。谢谢我不知道neo4j,但对于大多数数据库(奇怪的是,许多工程师不知道这一点),在执行分页查询时,必须使用
orderby
子句:如果没有
orderby
,数据库实现可以按其认为必要的顺序自由返回结果(例如,性能,无论什么)。这意味着第2页的查询结果可能与第1页的结果没有任何连续性。@ean5533您知道这在neo中是如何工作的吗?@LesHazlewood您的担心是对的。答案取决于您的遍历是否可预测。SQL数据库之所以能够返回随机排序的结果,是因为数据页t为了性能目的而四处游荡。在neo4j的情况下,结果将受到neo4j遍历节点的顺序的影响,这可能是可预测的,具体取决于您的数据和查询。很难给出一般性的答案。如果没有order by子句,您如何保证在后续查询中返回节点?