Neo4j电影数据库中的密码结果顺序显示不正确

Neo4j电影数据库中的密码结果顺序显示不正确,neo4j,Neo4j,我尝试随机查找100部电影,然后使用电影id对结果进行排序。为此,我使用以下查询: MATCH (movie:Movie) WHERE RAND() < 0.3 RETURN movie.title as title,movie.id AS id ORDER BY id DESC LIMIT 100 匹配(电影:电影) 其中RAND()

我尝试随机查找100部电影,然后使用电影id对结果进行排序。为此,我使用以下查询:

MATCH (movie:Movie)
WHERE RAND() < 0.3
RETURN movie.title as title,movie.id AS id
ORDER BY id DESC
LIMIT 100
匹配(电影:电影)
其中RAND()<0.3
将movie.title返回为title,将movie.id返回为id
按id描述订购
限制100
但结果并不好:

标题------------------------------------------id

职业大联盟-----------------9942

朱帕卡布拉--------------------9937

哈利茨维尔-------------------9935

侦探--------------------------------------------993

振铃器-----------------9927

布雷德雷恩-------------------9926



993
应该在列表的底部,但它位于错误的位置。有人能建议我怎么解决它吗

节点上的id属性值是字符串,而不是整数。字符串“102”位于任何前缀为“102”的字符串之前,这将解释您的顺序

在节点上设置id属性时,请去掉引号以处理整数而不是字符串

你是从哪里获得电影数据库的?你使用的是什么版本的Neo4j?在Neo4j 3.1上,电影图中没有id属性

编辑

从链接下载示例数据库后,我可以确认它使用的是字符串id值。因此,此属性的任何比较和排序都将基于字符串,而不是数字

在实际图形中,您需要确保从一开始就为属性使用正确的数据类型

对于此查询,如果不希望将所有id属性转换为整数,则至少可以转换查询中使用的值并基于这些值进行排序(不会将它们保存回图形,因此尽管查询中的排序正确,但属性仍将基于字符串)

匹配(电影:电影)
其中RAND()<0.3
将movie.title返回为title,将movie.id返回为id
订单编号(id)说明
限制100
编辑2

之所以只能得到更高的值,是因为查询首先显式地对结果排序,然后对排序结果中的前100个进行排序。如果要避免这种情况,请先获取100个结果,然后排序:

MATCH (movie:Movie)
WHERE RAND() < 0.3
WITH movie LIMIT 100
RETURN movie.title as title,movie.id AS id
ORDER BY toInt(id) DESC
匹配(电影:电影)
其中RAND()<0.3
电影限额100
将movie.title返回为title,将movie.id返回为id
订单编号(id)说明

如果你想在挑选的电影ID中有更多的变化,那么你需要改变随机数的阈值。目前,30%的电影节点位于限制之前的结果集中。您可能需要选择一个较低的值。

您的显示结果按字母数字升序(而不是降序)排列。是否确实指定了
DESC
?再次添加输出。检查一下谢谢,我知道了。我已经从这里下载了数据库:如何在这个数据库中解决这个问题?我正在使用neo4j 3.1.0谢谢。我已经用这个检查过了。但在这种情况下,值仅来自更高的值,并且值之间的距离太近,尽管列表包含50000部电影。在我的答案中添加了一些解释和建议。非常感谢。你帮助我理解了这个概念:)
MATCH (movie:Movie)
WHERE RAND() < 0.3
WITH movie LIMIT 100
RETURN movie.title as title,movie.id AS id
ORDER BY toInt(id) DESC