neo4j:有没有办法根据结果的总长度跳过结果

neo4j:有没有办法根据结果的总长度跳过结果,neo4j,cypher,Neo4j,Cypher,我得到了一个返回特定类型的所有节点的查询。我试图只返回10个结果,这些结果均匀分布在整个集合中 我试过: $START t=node(*) MATCH (image:Image) RETURN image.name ORDER BY image.name SKIP toInt(count(image.name)/10); 但是,这将返回一条错误消息,说明不允许在SKIP中使用变量 我想我可以尝试在count函数中重新运行整个语句,然后: START t=node(*) MATCH (im

我得到了一个返回特定类型的所有节点的查询。我试图只返回10个结果,这些结果均匀分布在整个集合中

我试过:

$START t=node(*) 
MATCH (image:Image) RETURN image.name ORDER BY image.name 
SKIP toInt(count(image.name)/10);
但是,这将返回一条错误消息,说明不允许在SKIP中使用变量

我想我可以尝试在count函数中重新运行整个语句,然后:

START t=node(*) 
MATCH (image:Image) RETURN image.name ORDER BY image.name
SKIP toInt(count(MATCH (image:Image) RETURN image.name)/10);
但是,这将返回一个无效的输入错误:

Invalid input 'R': expected whitespace, comment, '.', node labels, '[', "=~", IN, STARTS, ENDS, CONTAINS, IS, '^', '*', '/', '%', '+', '-', '=', "<>", "!=", '<', '>', "<=", ">=", AND, XOR, OR, ',' or ')' (line 3, column 38 (offset: 112))
"SKIP toInt(count(MATCH (image:Image) RETURN image.name)/10);"
                                      ^
无效输入“R”:应为空格、注释“.”、节点标签“[”、“=~”、IN、Start、ENDS、CONTAINS、IS“^'、“*”、“/”、“%”、“+”、“-”、“=”、“!=”、“=”、XOR、或“、”或“)(第3行第38列(偏移量:112))
“跳过toInt(计数(匹配(图像:图像)返回图像.名称)/10;”
^
您可以将结果添加到列表中,然后从集合中返回10个元素:

MATCH (image:Image)
WITH image.name AS imageName
ORDER BY imageName
WITH COLLECT(imageName) AS imageNames, range(0, 10) AS indices
UNWIND indices AS index
RETURN imageNames[toInt(length(imageNames) * index / 10)]
为了得到索引,我们创建了一个包含10个数字(0,…,9)的列表,它们得到10个单独的行,并将它们分布在索引中

请注意,由于服务器必须计算和收集所有结果,因此此查询效率不高,但结果集仅包含10行


(注意:我没有测试这个查询。)

如果你只想返回10个结果,为什么不使用
LIMIT 10
?@GaborSzarnyas LIMIT 10只返回前10个,所有图像都是按时间顺序排序的,我想从相等的距离抓取10个样本(即,如果我的集合中有50个图像,我想每5个图像返回一个)好的!下一个问题:您使用的是哪个版本?由于Neo4j 2.0+,您不需要
START
子句(您无论如何都不使用
t
的值)。@Gaborszarnya很抱歉,这是我的错误-我试图修改一些旧的stackoverflow代码