在neo4j cypher中检索确切的节点ID

时间:2016-04-08 06:00:16

标签: java jdbc neo4j cypher

我使用neo4j-jdbc 2.3.2作为java的neo4j客户端。当我执行以下密码查询时 match(p:Person) where p.id_number='761201948V' return p.id;它将返回P2547228作为节点ID。我觉得id与节点的其他属性相同,因为我可以在where子句中使用它。

但是在这里我期待一个可以在这个查询中使用的整数START p=node('node.id') return p;这个id是neo4j db的内部事物吗?有没有办法检索这个身份?

从以下两个密码中最有效的一个是什么?(如果两者都指的是相同的节点)

  1. START p=node('2547223') return p;
  2. match(p:Person) where p.id='P2547228' return p;

1 个答案:

答案 0 :(得分:3)

您必须使用ID(x)功能。请注意,ID(x)x.id是完全不同的事情。前者返回由Neo4j本身管理的内部节点/关系id。后者提供id属性,该属性由用户管理,而不是由数据库本身管理。

另请注意,节点/关系ID始终为数字。

使用START几乎是旧学校,不应再使用了(除了访问手动索引):

start p=node(2547228) return p 

这是一个等同的陈述。它非常高效,因为它只需要在节点存储上执行简单的搜索操作:

match(p:Person) where id(p)=2547228 return p;

查找属性需要节点标签扫描或架构索引查找:

match(p:Person) where p.id=2547228 return p;

只需在声明前添加PROFILE

,就可以自行查看查询计划
相关问题