密码子句中的匹配

问题描述 投票:0回答:2

如何在 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")')

这与匹配子句有何不同

neo4j cypher
2个回答
6
投票

这个想法是你可以做到:

MATCH (m:movie)
WHERE m.movie_id in ["1", "2", "3"]

但是,从 2.0.1 开始,这不会使用索引。这是新标签索引中缺少的功能,我希望很快就能得到解决。 https://github.com/neo4j/neo4j/issues/861


0
投票

我找到了一个(有点丑陋的)临时解决方法。

以下查询不使用 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 ...;

有没有办法将这些组合成一个查询?联合可以嵌套在另一个查询中吗?

© www.soinside.com 2019 - 2024. All rights reserved.