如何使用START with Cypher/Neo4j 2.0

如何使用START with Cypher/Neo4j 2.0,neo4j,cypher,Neo4j,Cypher,我正在试用最新的Neo4j 2.0.1版本的Graph Databases book PDF第51-52页中提供的示例。看来我不能从书中复制粘贴代码示例,我猜语法不再有效 START bob=node:user(username='Bob'), charlie=node:user(username='Charlie') MATCH (bob)-[e:EMAILED]->(charlie) RETURN e Got #=> Index `user` does not exist.

我正在试用最新的Neo4j 2.0.1版本的Graph Databases book PDF第51-52页中提供的示例。看来我不能从书中复制粘贴代码示例,我猜语法不再有效

START bob=node:user(username='Bob'),
charlie=node:user(username='Charlie')
MATCH (bob)-[e:EMAILED]->(charlie)
RETURN e

Got #=> Index `user` does not exist. 
因此,我尝试不使用“用户”

START bob=node(username='Bob'),
charlie=node(username='Charlie')
MATCH (bob)-[e:EMAILED]->(charlie)
RETURN e

Got #=> Invalid input 'u': expected whitespace, an unsigned integer, a parameter or '*' 
试过了,但没用

START bob=node({username:'Bob'}),
(charlie=node({username:'Charlie'})
MATCH (bob)-[e:EMAILED]->(charlie)
RETURN e

Got #=> Invalid input ':': expected an identifier character, whitespace or '}'

我想用开始然后匹配来实现这一点。如果您能给我们一点指导,我们将不胜感激。

2.0版的语法已经改变

您的第一个查询应该如下所示

MATCH (bob {username:'Bob'})-[e:EMAILED]->(charlie {username:'Charlie'})
RETURN e

由于需要先创建用户索引,因此查询无法立即进行。但这不能用Cypher完成,请参阅以获取更多信息。您的语法仍然有效,但Lucene索引被认为是遗留的。模式索引取代了它们,但它们尚未完全成熟,例如,不支持通配符搜索

您还需要使用标签,在您的情况下,使用用户标签。查询可以重构为:

MATCH (b:User { username:'Bob' })-[e:EMAILED]->(c:User { username:'Charlie' })
RETURN e
为了获得良好的性能,还可以在username属性上添加架构索引:

CREATE INDEX ON :User(username)

如上所述,启动是可选的。鉴于它列在Cypher 2.0参考卡中不推荐使用的部分下,我将尽量避免出于安全目的继续使用它


但是,refcard确实声明,为了明确使用较旧的语法,您可以使用不带引号的Cypher 1.9作为Cypher查询的前缀。

该语法仍然有效,您刚刚提供了一个服务于相同结果的不同查询。我希望使用START,然后使用MATCH,除非v2.0中不推荐使用START。不创建索引的解决方案是什么。我是否可以通过省略对索引的引用来使用相同的查询?或者START总是必须有索引吗?不,如果有id,也可以从id开始。例如,启动n=节点1,m=节点2。Fred的建议是Neo4j 2.0中的首选方法之一。