在找到匹配关系之间增加权重 - 密码

时间:2015-07-10 19:16:22

标签: neo4j cypher

我在cypher中有一个查询,我创建了一个关系:



MATCH match (u:user {id : "10662"})-[r:has_profile]->(p:profile)
  , (u2:user)-[r2:has_profile]->(p2:profile)
WHERE
  p.user_id <> p2.user_id 
AND  abs(u2.date_birth - u.date_birth) >= 94608000000
merge u-[r:matches_with { weight: rand() }]->u2
RETURN collect(u2.id) as id;
&#13;
&#13;
&#13;

在这种特殊情况下,当我找到u和u2之间的先前关系时,我试图仅在匹配时创建u和u2之间的关系。它只会增加关系中的权重。 我试图根据重量返回比赛。

有人可以通过此查询建议一种增加查找匹配权重的方法。谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个查询,查找从特定matches_with开始的所有user关系,增加关系的权重,并返回按权重排序的结果。

MATCH (u:user { id : "10662" })-[r:matches_with]->(u2)
SET r.weight = r.weight + 1
RETURN u, r, u2
ORDER BY r.weight;

答案 1 :(得分:1)

我找到了一种可以改变体重的机制。 我在return语句之前添加了merge子句:

&#13;
&#13;
MATCH (u:user { id : "10662" })-[r:matches_with]->(u2)

  merge (u)-[m:matches_with]->(u2)
	SET m.weight= 
  CASE WHEN NOT (HAS (m.weight)) 
    THEN toFloat(0.125)
  ELSE  LAST(m.weight)/2 
  END

RETURN u.id, m, u2.id
ORDER BY m.weight;
&#13;
&#13;
&#13;

谢谢@cybersam。