2016-03-11 61 views
1

我发现类似的电影有以下的Cypher查询:如何提高Neo4j/Cypher中特定关系的权重?

MATCH (m:Movie)-[r*1..2]-(m2:Movie) 
WHERE m.movieID = '1' 
UNWIND r AS rels 
WITH count(rels) as foo, m2, m 
ORDER BY foo desc 
RETURN DISTINCT m2.title 
LIMIT 25 

基本上找到有共同关系的电影,并返回那些有m最常见的关系,有序的电影。但是,一些关系比其他关系更重要。例如,我想提高[:DIRECTED]关系,以便由同一个导演执导的电影可以在其他人之前返回。我怎样才能做到这一点?像Dijkstra的算法与:DIRECTED关系有一个低成本?

回答

1

它比这更容易,你可以用CASE的表达式来应用权重。

MATCH (m:Movie)-[r*1..2]-(m2:Movie) 
WHERE m.movieID = '1' 
UNWIND r AS rels 
WITH rels,case type(rels) when "DIRECTED" then 1.2 else 1.0 end as weight 
WITH sum(weight) as foo, m2, m 
ORDER BY foo desc 
RETURN DISTINCT m2.title 
LIMIT 25