使用Neo4j进行基于内容的过滤?

时间:2014-09-17 06:48:15

标签: algorithm neo4j

我有两个实体: - 啤酒 - 用户

Beer实体具有以下属性(甜度1-10,苦味1-10,TasteAttributeX 1-10,TasteAttributeY 1-10,国家,地区等。

用户稍后将应用不同的操作(关系),例如评分(1-5)。

问题: 我怎样才能将类似的啤酒(基于Sweetness,Bitterness,TasteAttributes)与我之前喜欢的啤酒相提并论。

您如何在Neo4j中创建数据模型?

1 个答案:

答案 0 :(得分:0)

这是主观的;会有很多不同的方法,但这是一个建议。

首先,将连续变量分类为分类变量。我的意思是,比如说你的甜度为1-10,分为三类(低[1-3],中(4-6),高[> 6])。为每个类别做这个。

其次,为每个类别创建一个“索引节点”。像这样:

CREATE (l:Sweetness {label:"Low"});
MATCH (b:Beer),(l:Sweetness {label:"Low") 
WHERE b.sweetness <= 3 
CREATE b-[:sweetness]->(l);

为每个“类别”执行此操作。

然后,您可以找到具有类似配置文件的相关啤酒:

MATCH (b:Beer { type: "ThisOneIKnowIReallyLike" })-[:sweetness]->(sweetCategory:Sweetness)<-[:sweetness]-(otherBeer:Beer),
      b-[:bitterness]->(bitterCategory:Bitterness)<-[:bitterness]-(otherBeer)
WHERE b <> otherBeer
RETURN otherBeer;

现在您已经获得了符合相同类别的啤酒列表。