我没有任何关于为什么Neo4j以这种方式表现的假设,所以我要提供基本的基本信息。如果您还需要更多信息,请询问。
我有以下查询,我认为上下文不是很重要。只能通过名字来掌握意图。
MATCH (e:Evidence)-[*2]->(t:Term)
WHERE e.description =~ {regexp} OR t.description =~ {regexp} OR t.name =~ {regexp}
OPTIONAL MATCH (e:Evidence)-[*2]->(t2:Term)
WHERE t2.description =~ {regexp} OR t2.name =~ {regexp}
WITH e, count(t2) AS termsFound
ORDER BY termsFound DESC
SKIP 0 LIMIT 10
RETURN e;
对于用于{regexp}参数的某些关键字,查询返回19行(包括和不包含分页)。但是通过分页,查询返回重复的ID。
WITH PAGINATION: 480,584,692,638,829,797,366,337,920,637,310,737,949,411,766,479,533,562,637
WITHOUT PAGINATION: 480,584,692,638,829,797,366,448,337,920,310,737,949,411,766,479,533,562,637
ID为637的元素在两个页面的最后一行中重复(页面跳过0限制10的第10行和页面跳过10限制10的第9行)。
这真是奇怪的行为。为什么会发生这种情况的唯一假设是我的订单条件(ORDER BY termsFound DESC)对大多数行返回相同的数字(1),这反过来会使Neo4j没有选择在第二页上返回的正确元素。
编辑1(特定版本)
spring.data.neo4j = 3.0.1.RELEASE
neo4j.kernel = 2.0.1
neo4j.cypher = 2.0.1
neo4j.cypher.dsl = 2.0.1
答案 0 :(得分:1)
根据Michael Hunger的要求检查版本并更新为以下数字:
spring.data.neo4j = 3.1.0.RELEASE
neo4j.kernel = 2.0.3
neo4j.cypher = 2.0.3
neo4j.cypher.dsl = 2.0.1
不确定问题出在哪里,但这足以解决问题。