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
Neo4j 密码查询:是否可以;隐藏“;一条带“的现有路径”;虚拟关系;?_Neo4j_Cypher - Fatal编程技术网

Neo4j 密码查询:是否可以;隐藏“;一条带“的现有路径”;虚拟关系;?

Neo4j 密码查询:是否可以;隐藏“;一条带“的现有路径”;虚拟关系;?,neo4j,cypher,Neo4j,Cypher,我们正在进行一个项目,试图将类似Java代码连接的结构映射到Noe4J 2.1.5。我们已经成功地将应用程序与JAR类和方法连接起来,例如,我们可以得到一个密码答案,结果是: App1-->Jar1-->Class1-->Method1-->Method2-->Method3<--Class22<--Jar2<--App1 Cypher有没有可能在不建立新关系的情况下获得这样的结果 Jar1-[:PATH_EXISTS]-Jar2 我们在手册中

我们正在进行一个项目,试图将类似Java代码连接的结构映射到Noe4J 2.1.5。我们已经成功地将应用程序与JAR类和方法连接起来,例如,我们可以得到一个密码答案,结果是:

App1-->Jar1-->Class1-->Method1-->Method2-->Method3<--Class22<--Jar2<--App1
Cypher有没有可能在不建立新关系的情况下获得这样的结果

Jar1-[:PATH_EXISTS]-Jar2
我们在手册中或这里的堆栈溢出上都找不到任何与折叠/隐藏路径相关的内容

问候


克里斯托弗基本上有两种方法

第一个是明确地建立新的关系,但我不会谈论太多,因为你似乎已经想到了这一点,并拒绝了它。这种方法很简单,但需要更多的磁盘(取决于图形的大小)

第二种方法是在需要时查询路径,路径长度可变,如下所示:

MATCH (jar1 {myid: "something"})-[*]->(jar2 {myid: "somethingelse"})
RETURN jar2;
这将得到您所需要的,但它要求每次需要时都重新计算这个遥远的路径。所以,这很容易,但它是计算密集型的

现在,更广泛地说,你想要的是一个。在OWL/RDF世界中,人们将创建描述不同类型实体及其关系的本体。这些关系的后果之一是,它们可以是传递性的,并可能对它们产生影响。一个典型的例子是,一个人是一个实体,而像
motherOf
fatherOf
这样的东西是两者之间的关系。因此,如果节点之间的关系路径为
fatherOf
,即
(a)-[:fatherOf]->(B)-[:fatherOf]->(C)
,推理引擎将返回
(a)
(C)
按族相关的“事实”。这将是你本体论定义的结果。这个“事实”实际上不会出现在RDF存储中,它只是被事实所包含

在您的例子中,您需要编写一个本体,该本体指定图形中的所有单个关系都是某种关系类型的专门化(如“关联到”)。然后你会问推理者Jar1和Jar2之间是否存在“相关”关系,答案是肯定的,因为你的本体论定义

好的,那么坏消息是neo4j不是RDF,也不能这样做。而且,做这种事情比我说的要困难得多;正确的本体建模本身就是一门艺术,与20世纪70年代prolog世界的逻辑编程不同。但基本上,这种推断听起来就是你想要的


我认为,在neo4j的未来版本中,您可能希望得到类似于数据库“视图”的东西,或者更好的模式支持。也就是说,应该可以指定,每当某个关系模式成立时,其他关系也应该存在。

Wow,非常感谢@carlodurso的解释,这正是我想要的,现在我知道为什么我应该在我未来的系统中加入本体论。我知道这更复杂,但现在我知道我应该朝哪个方向寻找答案了!
MATCH (jar1 {myid: "something"})-[*]->(jar2 {myid: "somethingelse"})
RETURN jar2;