我在处理路径搜索时试图了解neo4j的机制。我研究了开发人员手册中的查询模式和执行计划运营商,但我仍然有一些问题。
如果我错了,请纠正我,但是从我阅读的内容以及Neo4J博客上的某些帖子中,我了解Cypher和Java Travers通常会执行深度优先的搜索,更具体的知情搜索,以及该可变的 - 长度查询适合其中。我还读到,最短的路径计划使用广度优先的双向搜索,而深度优先的搜索是后备。
除此之外,是否有任何方法可以在neo4j中进行广度优先搜索?
我知道APOC过程库允许通过路径扩展器进行此类搜索,但是我将范围限制为现在的Cypher语言。
另外,可变长度模式是否会递归运行?在扩展过程中执行哪些过滤?我读到,在扩展期间检查了所有函数,但有些功能稍后执行。
出于这些问题的原因是,我要在多大程度上能够在多大程度上操纵数据并仅使用Cypher以及Neo4J,没有外部库,而无需通过API编写程序就可以进行复杂的遍历。/p>
如果这些问题是微不足道的,请原谅我。预先感谢。
作为声明的查询语言cypher dio dio do -dos not Ondering引擎将如何搜索模式。因此,只需指定模式,我们就无法指定哪种模式匹配算法应用于查找模式。因此,我们不能仅使用Cypher执行首次呼吸算法。
对于递归运行的可变长度模式,我们可以在单个边缘标签上使用kleene Star:知道**,或者我们可以在Cypher中使用或操作员:例如:知道|在Cypher中clasters*。本质上,这意味着(知道|遵循(*在常规路径查询(RPQ(格式中。等同于(a | b(*中的正则表达语法。我们还可以在Cypher中具有更多的边缘标签,例如(a | b | c | ....(*。
我们还可以在模式上指定varibale的长度为(( - [:知道| clasts*1..6] ->((在Cypher中。
但是,我们不能对几个模式进行递归迭代,例如一个子图,该子图具有一个带有一个传入边缘的节点,并且至少从同一节点出现了两个传播边缘。例如这样的模式(a( - [r] ->(b( - [s] ->(c(,(b( - [v] ->(d(。这是连接模式的一个示例。
通常可以根据属性密钥值对在Whe Where子句中执行过滤。我们可以在"匹配"子句中表达的模式中设置标签,以便基础引擎知道起始节点。例如,如以下查询
所做的match(a:person {name:'keanu reeves'}( - [r] ->(b(返回 *限制5