我已经阅读了Neo4j手册,并看到了很多关于电影图的简短例子 . 我也在本地安装它并与密码一起玩 .
以下是设置:我有以下节点:电影(名称和ID,由朋友拥有),演员(带名称和ID)导演(带姓名和ID),流派(带有ID和姓名)
关系是:演员扮演电影(1部电影 - 很多演员),导演导演了一部电影(每部电影1部导演但导演可以指导许多电影),电影有几种类型“(多对多)
1)由朋友拥有我不知道为什么但是按照LOAD CSV示例他们把USA作为一个节点而不是一个属性但是有一个逻辑上的理由为什么它更好地把它作为节点而不是像我这样的属性?
2)我想搜索的内容类似于这个问题的答案:Nearest nodes to a give node, assigning dynamically weight to relationship types
但是 - 我对这种关系并不重视,更多的是“找到第一个给它连接的节点”
鉴于“朋友拥有”只能由1人拥有 .
如果给定的电影片名“蜘蛛侠”(例如目的由frank拥有),则找到John拥有的下一部电影 .
因此,在阅读Neo4j后,我相信我不需要指定需要哪种关系来遍历,而只是找到符合我标准的下一部电影,对吗?
所以按照上面的链接
MATCH (n:Start { title: 'Spider-Man' }),
(n)-[:CONNECTED*0..2]-(x)
RETURN x
所以去节点蜘蛛侠,只要它连接就去找我X但是我得到了* 0..2因为它的范围......如果我只是说“去找我第一个你意味着什么由约翰自己“
3)跟随#2 - 如何插入fitler“john”?
1 回答
你的问题中有很多东西没有意义 . 这是一个答案 .
1)如果你想根据国家搜索,将'USA'作为节点而不是属性是有用的 . 如果“USA”是节点,则可以通过从“USA”节点开始限制搜索 . 如果你不关心这样做,那真的不重要 . 它还可以为较长的国家/地区名称节省少量空间以存储名称一次并通过关系链接到该名称 .
2)您的示例与您描述的图形不匹配 . 没有更好的例子,我真的无法说话 .
3)一旦你改进了你的例子,这可能很容易回答 .
好 . 根据对答案的评论,这是您需要的 . 找一部由约翰拥有的电影,通过普通演员,导演等连接到弗兰克所拥有的电影“蜘蛛侠”(即(电影)< - (演员) - >(电影)等子图)你可以写:
如果您想要更多响应,请更改或删除RETURN子句中的LIMIT . 如果你想允许通过像(电影)< - (演员) - >(电影)< - (导演) - >(电影)这样的链的链,你可以增加匹配的关系数量(* 2)到4,6,8等 . 您可能不应该只将MATCH子句的关系部分写为 - [*] - ,因为这可能会进入无限循环 .