使用Neo4j和Cypher使用分组标签标记媒体

使用Neo4j和Cypher使用分组标签标记媒体,neo4j,cypher,Neo4j,Cypher,这里有个菜鸟 我用下面的代码制作了这个标记媒体的图表 我想做的是将标记分组到上下文中,这样一个上下文节点与多个标记具有相同的含义 MATCH (tf:Tag { name: 'Funny' }), (tr:Tag { name: 'Sad' }), (tm:Tag { name: 'Movie' }) (tt:Tag { name: 'TV Show' }) CREATE (fm:Context { name: 'Funny Movies' }), (ft:Context { name: 'F

这里有个菜鸟

我用下面的代码制作了这个标记媒体的图表

我想做的是将标记分组到上下文中,这样一个上下文节点与多个标记具有相同的含义

MATCH
(tf:Tag { name: 'Funny' }),
(tr:Tag { name: 'Sad' }),
(tm:Tag { name: 'Movie' })
(tt:Tag { name: 'TV Show' })
CREATE
(fm:Context { name: 'Funny Movies' }),
(ft:Context { name: 'Funny TV' }),
(s:Context { name: 'Sad Movies' }),
(fm)-[:INCLUDES]->(tf),
(fm)-[:INCLUDES]->(tm),
(ft)-[:INCLUDES]->(tf),
(ft)-[:INCLUDES]->(tt),
(s)-[:INCLUDES]->(tm),
(s)-[:INCLUDES]->(tr)
现在我们有了这个东西

我希望获取一个上下文节点并获取媒体,以便该上下文中的所有标记描述每个返回的媒体

我尝试了
MATCH(c:Context{name:'fully Movies})-[:INCLUDES]->()-[:descriptions]->(m)返回m
以匹配标记了
fully
Movies
的媒体。预期的输出只是宿醉,但我得到的是所有媒体


很明显,我不明白我需要写什么样的查询。我的查询有什么问题,如何生成所需的输出?

当您从上下文开始时,可以
收集标签,然后匹配与所有标签相关的电影。上一句中突出显示的单词是neo4j文档中供您参考的关键词:

MATCH (c:Context {name:"Funny Movies"})-[:INCLUDES]->(tag)
WITH collect(tag) AS tags
MATCH (m:Media) WHERE ALL( x IN tags WHERE (x)-[:DESCRIBES]->(m))
RETURN m

从上下文开始时,您可以
收集
标记,然后匹配与
所有
标记相关的电影。上一句中突出显示的单词是neo4j文档中供您参考的关键词:

MATCH (c:Context {name:"Funny Movies"})-[:INCLUDES]->(tag)
WITH collect(tag) AS tags
MATCH (m:Media) WHERE ALL( x IN tags WHERE (x)-[:DESCRIBES]->(m))
RETURN m

您可以使用双向模式:

MATCH (c:Context { name: 'Funny Movies' })-[:INCLUDES]->()-[:DESCRIBES]
      ->(m)<-
      [:DESCRIBES]-()<-[:INCLUDES]-(c)
RETURN m
MATCH(c:Context{name:'fully Movies'})-[:INCLUDES]->()-[:descriptions]

->(m) 您可以使用双向模式:

MATCH (c:Context { name: 'Funny Movies' })-[:INCLUDES]->()-[:DESCRIBES]
      ->(m)<-
      [:DESCRIBES]-()<-[:INCLUDES]-(c)
RETURN m
MATCH(c:Context{name:'fully Movies'})-[:INCLUDES]->()-[:descriptions]

->(m) 漂亮。谢谢,接受了。我认为只指定一个上下文会将输出过滤到仅连接到该上下文的顶点。既然没有,我的原始查询到底在做什么?您的查询只是按照模式,将()转换为节点,将[]转换为关系,您将看到它对不同媒体有5种模式。谢谢,接受了。我认为只指定一个上下文会将输出过滤到仅连接到该上下文的顶点。既然没有,那么我的原始查询到底在做什么?您的查询只是按照模式,将()转换为节点,将[]转换为关系,您将看到它有5种不同媒体的模式。