Indexing Neo4J节点ID是否针对访问进行了优化?

Indexing Neo4J节点ID是否针对访问进行了优化?,indexing,neo4j,nodes,Indexing,Neo4j,Nodes,我正在使用neo4j构建一个大型图形数据库 我有自己的外部索引,它为我提供了相关节点的标识符,我将使用这些标识符进一步遍历neo4j图。换句话说,当我开始查询数据库时,我已经有了开始节点ID 我的问题是:如果我使用neo4j/lucene索引访问相关节点,节点查找会更快吗 或者是查询,例如: START n=node({ids}) 已经针对节点访问进行了优化,使用以下各项无法获得任何结果: START n=node:nodeIndexName(key={value}) ? 谢谢,是的。Neo

我正在使用neo4j构建一个大型图形数据库

我有自己的外部索引,它为我提供了相关节点的标识符,我将使用这些标识符进一步遍历neo4j图。换句话说,当我开始查询数据库时,我已经有了开始节点ID

我的问题是:如果我使用neo4j/lucene索引访问相关节点,节点查找会更快吗

或者是查询,例如:

START n=node({ids})
已经针对节点访问进行了优化,使用以下各项无法获得任何结果:

START n=node:nodeIndexName(key={value})
?


谢谢,是的。Neo4j针对节点ID进行了优化,因为在持久性级别,所有节点都是一个块,所以访问节点100就像访问块100一样

我将警告您,如果您删除节点id,Neo4j不保证它。Neo4j回收ID。因此,如果在DB的生命周期中删除并添加多个节点,则外部条目可能有效,但不是您所期望的


//编辑:还有,为什么不使用Lucene来执行查找呢?当然,访问节点ID的速度更快,但这正是Lucene在进行查找时所做的,因此key:name,value:frank将返回节点ID 5123,neo4j将返回与该ID对应的节点。

是。Neo4j针对节点ID进行了优化,因为在持久性级别,所有节点都是一个块,所以访问节点100就像访问块100一样

我将警告您,如果您删除节点id,Neo4j不保证它。Neo4j回收ID。因此,如果在DB的生命周期中删除并添加多个节点,则外部条目可能有效,但不是您所期望的


//编辑:还有,为什么不使用Lucene来执行查找呢?当然,访问节点ID的速度更快,但这正是Lucene在进行查找时所做的,因此key:name,value:frank将返回节点ID 5123,neo4j将返回与该ID对应的节点。

。如果您正在进行外部查找,最好创建自己的标识符。@WesFreeman完全正确,只需使用UUID作为属性和索引。@Nicolas:谢谢,我实际上使用Lucene进行查找,但我的查找基于复杂的全文查询,带有特殊语法和专用令牌流,所以我现在在外部运行它们。查找的结果是节点ID。因此,我现在将继续使用它们,看看这是否会产生您所提到的那种持久性问题……更安全的选择是在Neo4j中使用UUID作为属性/lucene索引,并在您想要进行外部查找时将该UUID存储在外部。如果您正在进行外部查找,最好创建自己的标识符。@WesFreeman完全正确,只需使用UUID作为属性和索引。@Nicolas:谢谢,我实际上使用Lucene进行查找,但我的查找基于复杂的全文查询,带有特殊语法和专用令牌流,所以我现在在外部运行它们。查找的结果是节点ID。因此,我现在将继续使用它们,看看这是否会造成您提到的那种持久性问题……更安全的选择是在Neo4j中使用UUID作为属性/lucene索引,并在您希望进行外部查找时将该UUID存储在外部。