如何在 cypher 中进行子句匹配
例如我想查找 id 为 1、2 或 3 的电影。
match (m:movie {movie_id:("1","2","3")}) return m
如果你反对自动索引,语法是
START n=node:node_auto_index('movie_id:("123", "456", "789")')
这与匹配子句有何不同
这个想法是你可以做到:
MATCH (m:movie)
WHERE m.movie_id in ["1", "2", "3"]
但是,从 2.0.1 开始,这不会使用索引。这是新标签索引中缺少的功能,我希望很快就能得到解决。 https://github.com/neo4j/neo4j/issues/861
我找到了一个(有点丑陋的)临时解决方法。
以下查询不使用 Person(name) 上的索引:
match (p:Person)... where p.name in ['JOHN', 'BOB'] return ...;
因此,一种选择是重复整个查询 n 次:
match (p:Person)... where p.name = 'JOHN' return ...
union
match (p:Person)... where p.name = 'BOB' return ...
如果这是不可取的,那么另一种选择是重复 id 的一个小查询 n 次:
match (p:Person) where p.name ='JOHN' return id(p)
union
match (p:Person) where p.name ='BOB' return id(p);
然后使用第一个查询的结果执行第二个查询:
match (p:Person)... where id(p) in [8,16,75,7] return ...;
有没有办法将这些组合成一个查询?联合可以嵌套在另一个查询中吗?