我使用NEO4j创建了一个图,目前正在尝试构建一个比基于文本搜索更好的简单推荐系统。
创建了节点,如:Album、People、Type、Chart。
创建了关系,如:
People - [:role] -> Album,其中角色为Artist、Producer、Songwriter。
Album-[:is_a_type_of]->Type(类型基本上是Pop、Rock、Disco...)。
People -[:POPULAR_ON]->Chart(Chart是他们可能在哪个Billboard上)。
People -[:SIMILAR_TO]->People(预定的相似连接)。
我已经编写了以下Cypher查询语句:
创建了节点,如:Album、People、Type、Chart。
创建了关系,如:
People - [:role] -> Album,其中角色为Artist、Producer、Songwriter。
Album-[:is_a_type_of]->Type(类型基本上是Pop、Rock、Disco...)。
People -[:POPULAR_ON]->Chart(Chart是他们可能在哪个Billboard上)。
People -[:SIMILAR_TO]->People(预定的相似连接)。
我已经编写了以下Cypher查询语句:
MATCH (a:Album { id: { id } })-[:is_a_type_of]->(t)<-[:is_a_type_of]-(recommend)
WITH recommend, t, a
MATCH (recommend)<-[:ARTIST_OF]-(p)
OPTIONAL MATCH (p)-[:POPULAR_ON]->()
RETURN recommend, count(DISTINCT t) AS type
ORDER BY type DESC
LIMIT 25;
它可以工作,但如果它只与一种类型的音乐相连,那么很容易重复自己,因此具有相同的邻居。
有没有建议的方法说:
- 找到与起始专辑最相似的连接关系最多的下一个最佳专辑。
- 任何打破平局的建议?现在按类型排序(因此,如果一个专辑有多种类型的音乐,它会被赋予更高的价值,但如果每个专辑都有相同数量的类型,则没有更重要的了)
- -我创建了[:SIMILAR_TO]链接以强制将该关系视为重要考虑因素,但我还没有使用它的有效cypher
- -同样适用于[:Popular_On](也许应该放弃这种关系?)