基于共同关系评级的neo4j密码建议

Posted

技术标签:

【中文标题】基于共同关系评级的neo4j密码建议【英文标题】:neo4j cypher suggestion based on common relation rating 【发布时间】:2017-09-03 00:17:35 【问题描述】:

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

我有什么: 我从以下查询开始:

匹配(:主题参考: 1)-[ir:INGREDIENT_RATING]->(:Ingredient) 5 返回 r;

我希望发生的事情: 这将返回一种成分评分高于 5 的食谱,但这并未考虑该食谱的其他成分可能具有该用户给出的较低评分。

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

提前致谢,

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

MATCH (:Subject ref: '1')-[ir:INGREDIENT_RATING]->(i:Ingredient)-[:HAS_INGREDIENT]-(r:Recipe)-[:KITCHEN]->(k:Kitchen ) MATCH (r)-[HAS_INGREDIENT]-(in:Ingredient) WITH r, k, in, sum(ir.value) AS sum 哪里总和 > 10 RETURN DISTINCT r,collect(DISTINCT in) AS 配料,k AS 厨房,sum ORDER BY sum DESC

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

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

【问题讨论】:

我不确定你在问什么。请提供一些数据示例以及您期望返回的内容。 @betseyb 我用图像和更好的描述更新了场景。希望能更好地理解我试图完成的工作。 【参考方案1】:

听起来您需要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;

【讨论】:

您的建议为我指明了正确的方向,并且能够根据给我预期的结果构建查询。我相应地更新了我的帖子。只是,现在我得到了 r 的重复节点,即使我使用 DISTINCT。 这很奇怪。你的行完全一样吗?如果是这样,您可能需要检查图表中是否确实存在重复的配方节点。 找到了,我忘了一个菜谱可以有多个厨房,所以解决了一个厨房上的集合。

以上是关于基于共同关系评级的neo4j密码建议的主要内容,如果未能解决你的问题,请参考以下文章

评分/评级引擎 - 建议和示例?

[读论文]基金评级及其激励

浪潮业务稳定连续性获Global Data唯一“Leader”评级 蝉联数据中心整体能力“Very Strong”评级

基于Python的信用评分卡模型分析-give me some credit数据集AUC 0.93

机器学习案例丨基于广泛和深入的推荐 - 餐厅评级预测

Laravel Eloquent - 如何获得嵌套关系