Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 新的TraverseAPI的工作原理_Neo4j_Graph Traversal - Fatal编程技术网

Neo4j 新的TraverseAPI的工作原理

Neo4j 新的TraverseAPI的工作原理,neo4j,graph-traversal,Neo4j,Graph Traversal,现在,我正在学习neo4j的新的TraverseAPI,我遵循下面的链接 所以现在我知道了如何使用唯一性、求值器等。 也就是说,我知道如何改变api的特性 但我想知道的是它到底是如何穿越的 例如,我试图找到一个节点的邻居 neo4j是否使用索引来查找此项? neo4j是否保存哈希以查找邻居 更具体地说,例如,当我编写以下代码时 TraversalDescription desc = database.traversalDescription().breadthFirst().evaluator

现在,我正在学习neo4j的新的TraverseAPI,我遵循下面的链接

所以现在我知道了如何使用唯一性、求值器等。 也就是说,我知道如何改变api的特性

但我想知道的是它到底是如何穿越的

例如,我试图找到一个节点的邻居

neo4j是否使用索引来查找此项?
neo4j是否保存哈希以查找邻居

更具体地说,例如,当我编写以下代码时

TraversalDescription desc = database.traversalDescription().breadthFirst().evaluator( Evaluators.toDepth( 3) );

node =database.getNodeById(4601410);

Traverser traverser = desc.traverse(node);
在我的描述中,我使用了面包优先。这意味着当我给节点遍历时,代码应该找到第一个邻居。因此,api如何找到第一个邻居是我想知道的事情。节点中是否有指向邻居的指针?所以当我说遍历到深度3时,它会找到第一个邻域,然后将邻域作为递归函数中的节点,依此类推?所以如果我们说深度为10,那么它会变慢吗


因此,我想要的是如何改变api的自然行为以进行遍历?

TraversalDescription提供了一个概念,即决定下一步将使用哪些关系的组件。用于此

您可以使用自己的PathExpander实现,也可以使用中的预定义方法之一


如果您只想遍历,请遵循特定的关系类型,您可以使用它们来指定这些类型

简化的Neo4j在其存储中存储代表节点和关系的记录。每个节点都由磁盘上的一个节点记录表示,该记录包含第一个关系的指针(直接偏移到关系存储中)(如果愿意的话,可以是邻居)。关系记录彼此链接,因此获取节点的所有邻居将读取节点记录及其指向该关系记录的关系指针,并继续跟随这些前向指针,直到该链结束。这是否回答了您的问题?

请更具体一点-您希望如何改变行为?你想做什么样的遍历?有内置的(深度优先、广度优先等),您可以自定义并执行任何您想要的操作,但是“如何更改自然行为”取决于您试图完成的操作。@FrobberOfBits我想知道api如何遍历以找到其他节点?它如何从给定节点到达节点?请看我的editNeo4j是开源的,您可以自己在github上查看实现,或者在您自己的计算机上使用的编辑器/IDE上查看实现。@jjaderberg我当然可以查看。但如果你检查一下,你很容易就会发现它真的很复杂,我正在寻找一些东西(解释、方法等)来快速理解它