我的问题并不复杂,但我找不到答案。
下图显示了我到目前为止的结果。蓝色圆圈是我的出发点。我想要找到的是红色圆圈中的节点减去蓝色圆圈中的节点! (具有与起始节点共同的最多节点的节点)
这是一款根据您喜欢的内容推荐艺术品的应用程序。基于颜色,类型,艺术家等。
以下是我在图片中的结果代码:
START Art=node(8986)
MATCH P=(Art)-[r:HAS_COLOR]->(Color)<-[:HAS_COLOR]-(Art1)
RETURN P, count(DISTINCT P) as Rel
ORDER BY Rel DESC
希望这是可以理解的,有人可以帮助我。
答案 0 :(得分:1)
如果我做对了,你想要MATCH
所有其他艺术品与你的起点共享颜色(至少一个)。对于推荐,您希望按共享颜色的数量对它们进行排序。
此查询应该满足您的需求:
// start as you did before
START art1=node(8986)
// MATCH art1 to other art pieces via similar_color
MATCH (art1)-[:HAS_COLOR]->(similar_color:Color)<-[:HAS_COLOR]-(art2)
// only if art1 is not the same as art2
WHERE art1 <> art2
// return art2 and the number of similar colors
RETURN DISTINCT art2, count(DISTINCT similar_color) AS num_sc
// order by simiar colors
ORDER BY num_sc DESC
一些注意事项:
id
可以更改(例如,删除节点后id
将被重复使用),您可能需要考虑将START
替换为MATCH
art2:Artpiece
)Labels
的初始上限,而不是variables
(http://nigelsmall.com/zen)答案 1 :(得分:0)
我认为此查询可以帮助您:
START Art=node(8986)
MATCH (Art)-[:HAS_COLOR]->()<-[:HAS_COLOR]-(Art1)
WHERE id(Art1) != id(Art)
RETURN Art1
我匹配与Art
具有相同颜色的每个节点,并且WHERE
给定节点不是Art
。
我没有测试此查询,因为我没有您的数据集。如果您遇到任何问题,我会对其进行编辑。
在您的问题中添加数据集也可能非常棒:)
答案 2 :(得分:0)
MATCH (art:Art) WHERE id(art)=8986
MATCH (art)-[:HAS_COLOR]->(c:Color)
MATCH (c)<-[r:HAS_COLOR]-(rec:Art)
WHERE NOT art=rec
WITH rec, count(r) AS num
RETURN rec, num ORDER BY num DESC
这应返回其他Art
个节点,按照Art
的常用颜色数量排序,ID为8986.
答案 3 :(得分:0)
此查询是否符合您的要求?
START art=node(8986)
MATCH (art)-[r:HAS_COLOR]->(c:Color)
MATCH p=(c)<-[:HAS_COLOR]-(art1)
WHERE art1 <> art
RETURN p, count(DISTINCT p) as rel
ORDER BY rel DESC;
除了art
节点(及其所有HAS_COLOR
关系)之外,它应该返回相同的结果。