基于公共关系评级的neo4j cypher建议

基于公共关系评级的neo4j cypher建议,neo4j,cypher,Neo4j,Cypher,场景: John doe对2种配料进行了评级,其中2种恰好属于汤配方,只有1种属于比萨饼。查询应返回汤配方,因为这些成分评级的平均值大于5 我所拥有的: 我从以下问题开始: 匹配(:主题{ref: 1} )-[ir:成分等级]->(:成分)5返回r 我希望发生什么: 这将返回一种成分评级高于5的配方,但这并没有考虑到该配方的其他成分可能具有该用户给出的较低评级 所以我必须展开上面的查询,但我有点不知道从哪里开始 提前感谢, 更新1: 基于@InverseFalcon,我提出了这个,这给了我预期

场景:
John doe对2种配料进行了评级,其中2种恰好属于汤配方,只有1种属于比萨饼。查询应返回汤配方,因为这些成分评级的平均值大于5

我所拥有的: 我从以下问题开始:

匹配(:主题{ref: 1} )-[ir:成分等级]->(:成分)5返回r

我希望发生什么: 这将返回一种成分评级高于5的配方,但这并没有考虑到该配方的其他成分可能具有该用户给出的较低评级

所以我必须展开上面的查询,但我有点不知道从哪里开始

提前感谢,

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

匹配(:受试者{ref:'1'})-[ir:配料分级]->(i:配料)-[:有配料]-(r:配方)-[:厨房]->(k:厨房)
匹配(r)-[HAS_component]-(in:component)
以r,k,in,sum(ir.值)作为和
其中sum>10
返回不同的r,收集(不同的in)作为配料,k作为厨房,求和
按和说明排序

第二个匹配是因为没有它,它只返回带有评级的成分,我需要所有成分


只有一个奇怪之处,那就是即使在r上使用distinct,我也会得到一个重复的结果。

听起来你需要
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;
匹配(:受试者{ref:1})-[ir:成分评级]->(:成分)5
返回r;

我不知道你在问什么。请提供一些数据示例以及您希望返回的内容。@betseyb我用图像和更好的描述更新了场景。你的建议为我指明了正确的方向,并且能够根据我期望的结果构造一个查询。我相应地更新了我的帖子。只是,现在我得到了一个r的重复节点,即使我使用了DISTINCT。这很奇怪。你的行完全一样吗?如果是这样,您可能需要检查图表中是否确实存在重复的recipe节点。找到它后,我忘记了一个配方可以有多个厨房,因此解决了厨房收集问题。