Post 对 UNION 结果密码查询 neo4j 的处理

Post processing on UNION result cypher query neo4j

我使用 lucene 索引编写了以下查询。我知道 UNION 在 neo4j 中没有分页支持。我想 post 处理 此查询的最终结果对结果进行分页。

START user=node:peopleSearch('username:abhay*') RETURN user , user.createdDate as time UNION START rel= Relationship:peopleSearch('skillName:Java23') RETURN StartNode(rel) as user , StartNode(rel).createdDate as time

我已经关注了这个link。但它给了我关于 UNION RESULT 的错误。

我需要post处理并集最终结果以对其进行分页

引用的 github 问题尚未解决,因此 post 无法处理 UNION

在此期间,作为一种解决方法,您可以将查询拆分为两个查询。第一个结合了索引查找和 returns 节点 ID:

START user=node:peopleSearch('username:abhay*') RETURN id(user) as id     
UNION 
START rel= Relationship:peopleSearch('skillName:Java23') RETURN id(StartNode(rel)) as id

在客户端,将返回的 ID 收集到一个数组中,并使用密码参数提交第二个查询:

MATCH (n)
WHERE ID(n) IN {myIdArray}
WITH n
// placeholder for rest of this query

其中myIdArray的参数值为step1返回的ID。

我有一个 a few weeks ago, and it turns out Cypher currently does not support post-UNION processing

这意味着您应该使用相同的条件过滤并集的两个输入。

或者(如 中所述),如果可以使用 APOC,则可以 post 处理查询结果:

CALL apoc.cypher.run("... UNION ...", NULL) YIELD n, r, x
WHERE ...
RETURN n, r, x;

更新:现在可以在 Neo4j 4.0 中使用 CALL {subquery} construct