neo4j cypher建议基于共同关系评级

时间:2017-04-07 14:47:15

标签: neo4j cypher

情境: graph image
John doe评定了2种成分,其中2种成分恰好属于汤配方,只有1种比萨饼。该查询应该返回汤配方,因为那些成分评级的平均值> 5

我有什么: 我从下面的查询开始:

  

MATCH(:主题{ref:   1}) - [IR:INGREDIENT_RATING] - GT;(:成分)< - [:HAS_INGREDIENT] - (R:配方)   在哪里ir.value> 5返回r;

我想要发生什么: 如果配料的评级高于5,则返回配方,但这并未考虑该配方的其他成分可能具有该用户给出的较低评级。

所以我必须扩展上面的查询,但我有点无能为力。

提前致谢,

更新1: 基于@InverseFalcon,我提出了这个,它给了我期望的结果:

  

MATCH(:主题{ref:' 1'}) - [ir:INGREDIENT_RATING] - >(i:成分) - [:HAS_INGREDIENT] - (r:Recipe) - [:KITCHEN] - >(K:厨房)
  MATCH(r) - [HAS_INGREDIENT] - (in:Ingredient)
  with r,k,in,sum(ir.value)AS sum
  总和> 10个
  返回DISTINCT r,收集(DISTINCT in)AS成分,k AS厨房,总和
  ORDER BY sum DESC

第二场比赛是因为没有它,它只返回带有评级的成分,我需要所有这些。

只有一个奇怪的是,我得到一个重复的结果,即使很难,我在r上使用distinct。

1 个答案:

答案 0 :(得分:0)

听起来你需要avg()聚合函数来取多个值的平均值。这对你有用吗?

MATCH (:Subject {ref: 1})-[ir:INGREDIENT_RATING]->(:Ingredient)<-[:HAS_INGREDIENT]-(r:Recipe) 
WITH r, avg(ir.value) as avg
WHERE avg > 5 
RETURN r;