结合多个Neo4j查询的分数

问题描述:

我们有一个电影图。有演员,导演和电影。导演也有可能在另一部电影中,甚至是同一部电影中播放过。我们给演员一个他参与的每部电影的评分。我们还给他的每部电影评分一个导演。现在,我们正在寻找获得个人及其得分的列表,从最高分到最低分排序。所以,这些都是疑问,我们目前有:结合多个Neo4j查询的分数

MATCH (p:Person)-[idr:IsDirectorOf]->(m:Movie)

RETURN p.name AS name, COUNT(idr) AS numberOfMoviesDirected

ORDER BY numberOfMoviesDirected DESC;

MATCH (p:Person)-[iai:IsActorIn]->(m:Movie)

RETURN p.name AS name, COUNT(iai) AS numberOfMoviesPlayed

ORDER BY numberOfMoviesPlayed DESC;

我想结合这些查询,从两个查询中得到最高分的人一起在顶部。另外,请注意,我们稍后可能需要为混合添加另一个查询,因此仅适用于两个查询的解决方案可能并不是最好的。

你应该尝试此查询:

MATCH (p:Person) 
RETURN p, size((p:Person)-[:IsDirectorOf]->(:Movie)) + size((p:Person)-[:IsActorIn]->(:Movie)) AS score 
ORDER BY score DESC 

如果你想添加额外的分数,只是继续你的查询与WITH

干杯

UPDATE

对您的评论做出反应,这是查询:

MATCH (p:Person) 
WITH 
    max(size((p)-[:IsActorIn]->())) As maxActed, 
    max(size((p)-[:IsDirectorOf]->())) AS maxDirected 
MATCH (p:Person) 
RETURN 
    p, 
    size((p)-[:IsActorIn]->(:Movie))/toFloat(maxActed) + size((p)-[:IsDirectorOf]->(:Movie))/toFloat(maxDirected) AS score 
ORDER BY score DESC 
+0

如果我写的'[IDO:IsDirectorOf]',我得到'ido'不定义。为什么? –

+0

另外,如何在整个图中将每个大小除以相应的最大值(即正常化)? size((p:Person) - [:IsDirectorOf] - >(:Movie))/ MAX(size((p:Person) - [:IsDirectorOf] - >(:Movie)))'不起作用。 –

+0

运行更新的查询,我得到'Neo.ClientError.Statement.ArithmeticError'/by zero'。但最大值不是零。 –