5.16. Complex similarity computations

Calculate similarities by complex calculations

Here, a similarity between two players in a game is calculated by the number of times they have eaten the same food.

Query 

MATCH (me { name: 'me' })-[r1:ATE]->(food)<-[r2:ATE]-(you)
WITH me,count(DISTINCT r1) AS H1,count(DISTINCT r2) AS H2,you
MATCH (me)-[r1:ATE]->(food)<-[r2:ATE]-(you)
RETURN sum((1-ABS(r1.times/H1-r2.times/H2))*(r1.times+r2.times)/(H1+H2)) AS similarity

The two players and their similarity measure.

Result

similarity
1 row

-30.0

Try this query live create (_0 {`name`:"me"}) create (_1 {`name`:"meat"}) create (_2 {`name`:"you"}) create _0-[:`ATE` {`times`:10}]->_1 create _2-[:`ATE` {`times`:5}]->_1 MATCH (me {name: 'me'})-[r1:ATE]->(food)<-[r2:ATE]-(you) WITH me,count(distinct r1) as H1,count(distinct r2) as H2,you MATCH (me)-[r1:ATE]->(food)<-[r2:ATE]-(you) RETURN sum((1-ABS(r1.times/H1-r2.times/H2))*(r1.times+r2.times)/(H1+H2)) as similarity

Figure 5.19. Graph