如何查询多个或';ed Neo4j路径?

如何查询多个或';ed Neo4j路径?,neo4j,Neo4j,有人知道在Neo4j中查询多条路径的快速方法吗 假设我有电影节点,可以有我想要匹配的类型(这是psuedo代码) 匹配 (m:电影)也许这会有帮助OPTIONAL MATCHbeavior与MATCH语句类似,不同之处在于模式中与语句中特定的模式不匹配的任何元素都绑定为null,而不是使用all或none模式匹配方法 例如,要匹配电影、电影类型和可能的子类型: OPTIONAL MATCH (m:Movie)-[:IS_GENRE]->(g:Genre)<-[:IS_SUBGENRE

有人知道在Neo4j中查询多条路径的快速方法吗

假设我有电影节点,可以有我想要匹配的类型(这是psuedo代码)

匹配
(m:电影)也许这会有帮助
OPTIONAL MATCH
beavior与
MATCH
语句类似,不同之处在于模式中与语句中特定的模式不匹配的任何元素都绑定为null,而不是使用all或none模式匹配方法

例如,要匹配电影、电影类型和可能的子类型:

OPTIONAL MATCH (m:Movie)-[:IS_GENRE]->(g:Genre)<-[:IS_SUBGENRE]-(sub:Genre)
WHERE m.title = "The Matrix"
RETURN m, g, sub

可选匹配(m:Movie)-[:IS_GENRE]->(g:GENRE)您可以尝试最小长度为0的可变长度路径:

MATCH
(m:Movie)<-[:TYPE|:SUBGENRE*0..4]-(g) 
WHERE g:Genre and g.name = 'action' OR g:SubGenre and g.name='comedy'
匹配
(m:电影)[编辑]

以下
MATCH
子句应与伪代码等效。还有一个
USING INDEX
子句,它假设您有关于
的第一个:子类型(名称)
,以提高效率。(如果
流派
节点比
子流派
节点多,则可以在
:流派(名称)
上使用索引。)

匹配

(m:Movie)您的查询不包括最难的部分,如果不存在可变长度关系,我正在尝试匹配下面的密码:
(m:Movie)更新了我的答案以修复输入错误。事实上,我原来的答案已经涵盖了这一点,但更新后的答案更简单。我的链接控制台中的示例数据包含一个这样的示例。谢谢CyberSam!我感谢你的帮助。你太棒了!很好,只是使用了一个修改过的查询版本,在250毫秒内得到了结果!非常感谢。我爱Neo4j!!谢谢你,威廉。我尝试使用可选的匹配,但这会减慢查询速度
MATCH
(m:Movie)<-[:TYPE|:SUBGENRE*0..4]-(g) 
WHERE g:Genre and g.name = 'action' OR g:SubGenre and g.name='comedy'
MATCH
(m:Movie)<-[:TYPE*0..4]-(g:Genre { name:'action' }) 
RETURN distinct m
UNION
(m:Movie)-[:SUBGENRE]->(x)<-[:SUB_TYPE*1..3]-(sg:SubGenre {name: 'comedy'})
RETURN distinct m
MATCH
  (m:Movie)<-[:TYPE*0..4]-(g:Genre { name:'action' }),
  (m)-[:SUBGENRE]->()<-[:SUB_TYPE*0..3]-(sg:SubGenre { name: 'comedy' })
USING INDEX sg:SubGenre(name)