Neo4j-查询:以特殊顺序将不同的查询结果合并到一个集合中
我有一个这样的问题Neo4j-查询:以特殊顺序将不同的查询结果合并到一个集合中,neo4j,cypher,Neo4j,Cypher,我有一个这样的问题 START a = node:lucene_index('name: "actor1"') MATCH (a:Actor)--(b:Movies) WHERE b.director = 'director1' WITH b LIMIT 4 RETURN 'Movies' AS resultType, collect (DISTINCT b) as resultList UNION ALL START a = node:lucene_index('name: "actor
START a = node:lucene_index('name: "actor1"')
MATCH (a:Actor)--(b:Movies)
WHERE b.director = 'director1'
WITH b LIMIT 4
RETURN 'Movies' AS resultType, collect (DISTINCT b) as resultList
UNION ALL
START a = node:lucene_index('name: "actor1"')
MATCH (a:Actor)--(b:Movies)
WHERE b.director = 'director2'
WITH b LIMIT 4
RETURN 'Movies' AS resultType, collect (DISTINCT b) as resultList
UNION ALL
START a = node:lucene_index('name: "actor1"')
MATCH (a:Actor)-[r]-(b:Movies)
WITH b
MATCH (b)-[r2]-(b2:Actor)
WITH b, count(r2) as relations
ORDER BY toInt(relations) DESC
LIMIT 2
RETURN 'Movies' AS resultType, collect (DISTINCT b) as resultList
是否可以将这些查询合并为一个查询?
resultList必须按照查询中显示的顺序包含电影,这一点很重要
- 1-4董事1
- 5-8董事2
- 9-10与演员关系最密切
谢谢大家! 您可能想看看关于的Neo4j知识库文章。这提供了一些执行联合的方法,但之后可以执行排序操作
当然,你需要一些东西来解决这个问题。我将为每个子查询添加第三个返回的字段(例如,
order
),并显式地将第一个子查询设置为1,第二个子查询设置为2,第三个子查询设置为3。然后,在联合后处理时,只需对该字段进行排序。您可能需要查看上的Neo4j知识库文章。这提供了一些执行联合的方法,但之后可以执行排序操作
当然,你需要一些东西来解决这个问题。我将为每个子查询添加第三个返回的字段(例如,
order
),并显式地将第一个子查询设置为1,第二个子查询设置为2,第三个子查询设置为3。然后在联合后处理时只需对该字段进行排序。您使用的语法已被弃用(START a=node:(…)
)。您使用的是哪一个Neo4j版本?我们知道不推荐使用的索引,希望我们的解析软件(它填充了我们的数据库)很快就会升级(Neo4j版本是3.0.2)。(我们的DB不包含电影和演员:)我只是写了一个抽象的例子,但升级并不能改变neo4j将使用关系触发“MATCH(a:Actor)-(b:movies)”两次一次的事实。我想知道是否有一种方法可以在一个集合中收集不同排序的结果。您使用的语法已被弃用(START a=node:(…)
)。您使用的是哪一个Neo4j版本?我们知道不推荐使用的索引,希望我们的解析软件(它填充了我们的数据库)很快就会升级(Neo4j版本是3.0.2)。(我们的DB不包含电影和演员:)我只是写了一个抽象的例子,但升级并不能改变neo4j将使用关系触发“MATCH(a:Actor)-(b:movies)”两次一次的事实。我想知道是否有一种方法可以在一个集合中收集不同排序的结果