2016-07-06 94 views
3

我希望能够找到一个特定的节点通过它的性能方面的原因ID(ID是比索引更有效)Neo4j - 按ID查找节点 - 如何获取查询ID?

为了执行下面的例子:

MATCH (s) 
WHERE ID(s) = 65110 
RETURN s 

我将需要节点的ID(在这种情况下为65110)

但是如何得到它?由于ID是自动生成的,因此无需查询该图即可找到该ID,哪种类型的目的会失败,因为我已经拥有该节点。

我错过了什么吗?

+0

如果你不知道你为什么想通过ID查找,然后没有。 +使用索引属性和标签+ Mikesname说。 –

+0

我知道我为什么想用ID - 查找性能。 – lxngxr

回答

3

TL; DR:使用索引属性进行查找,除非您绝对需要优化并可以测量差异。

通常,您使用索引查找作为入口点,即获取提供边缘遍历开始的节点。虽然Neo4j节点ID的指针式性质意味着它们在理论上更快,但索引查找也非常有效,所以除非您确定它会产生可衡量的差异,否则不应以性能为由对其进行折扣。

您还应该考虑Neo4j节点ID不稳定。如果删除节点,将来可能会重复使用相同的ID。出于这个原因,他们应该被认为是内部实现细节,而不是应该依赖于应用程序外部接口的一部分。

也就是说,我有一个应用程序将Neo4j ID存储在Solr索引中,用于批量查找节点,但该索引被视为易失性,并且节点还包含索引的应用程序生成的UUID属性(具有唯一约束)作为他们的主要“主键”。

进一步阅读和讨论:https://github.com/neo4j/neo4j/issues/258