2017-04-07 73 views
0

场景: graph image
李四已经额定2层的成分,这些成分的2碰巧属于汤秘方,只有1到比萨饼。查询应返回汤食谱,因为这些成分的收视率平均为> 5Neo4j的暗号建议

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

MATCH(:主题{REF: 1} ) - [ir:INGREDIENT_RATING] - >(:Ingredients)< - [:HAS_INGREDIENT] - (r:Recipe) WHERE ir.value> 5 return r;

我想发生: 这将返回食谱,在某种成分具有高于等级5,但这并不考虑到该配方中的其它成分可以有由用户给予较低评级。

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

由于提前,

更新1: 基于@InverseFalcon我这来了,这给了我我所期望的结果:

MATCH(:主题{REF:“ (r) - [HAS_INGREDIENT] - >(k:Kitchen)
MATCH(r) - [HAS_INGREDIENT] - [ir:INGREDIENT_RATING] - >(i:Ingredient) - [:HAS_INGREDIENT] - (in:成分)
WITH r,k,in,sum(ir.value)AS sum
WHERE总和> 10
RETURN DISTINCT R,收集(在DISTINCT)AS成分,K作为厨房,总和
ORDER BY总和DESC

第二匹配是因为没有它,它仅与一个返回成分评级,我需要所有人。

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

+0

我不确定你在问什么。请提供一些数据示例以及您期望返回的内容。 – betseyb

+0

@betseyb我用图像和更好的描述更新了场景。希望最好能够理解我试图完成的事情。 – Edwin

回答

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; 
+0

你的建议指出我正确的方向,并能够构建一个基于给我我期望的结果的查询。我相应地更新了我的帖子。只有,现在我得到了r的重复节点,即使我使用DISTINCT。 – Edwin

+0

这很奇怪。你的排是否完全一样?如果是这样,您可能需要检查图形中是否实际存在重复的配方节点。 – InverseFalcon

+0

发现它,我忘了一个食谱可以有多个厨房,所以解决的厨房收集是。 – Edwin