使用有向边

时间:2015-12-24 01:28:31

标签: path neo4j cypher neo4j-java-api

这是我第一次尝试Neo4j,请原谅我,如果我遗漏了一些非常微不足道的话。 这是我的问题:

考虑在以下Neo4j控制台示例中创建的图形:  http://console.neo4j.org/?id=y13kbv

我们在此示例中有以下节点:

(人{memberId,memberName,membershipDate})

(电子邮件{value,badFlag})

(AccountNumber {value,badFlag})

我们可能有更多节点捕获与个人相关的功能,如creditCard,billAddress,shipAddress等。  所有这些节点都与Email和AccountNumber节点相同:  (creditCard {value,badFlag}),(billAddress {value,badFlag})等

如图所示,在Neo4j控制台示例中填充图表,假设我们在图表中再添加一个Person,如下所示:

(p7:Person {memberId:'18' , memberName:'John', membershipDate:'12/2/2015'}),
(email6:Email {value: 'john@gmail.com', badFlag:'false'}),
(a2)-[b13:BELONGS_TO]->(p7),
(email6)-[b14:BELONGS_TO]->(p7)

当我们将这个新人添加到系统时,用例是我们必须检查是否存在来自新人的功能的路径(" email6"和" a2&#34 ;节点)到系统中任何其他节点,其中" badFlag = true",在本例中为节点(a1 {值:1234,badFlag:true})。

此处,结果路径为 (email6)-[BELONGS_TO]->(p7)<-[BELONGS_TO]-(a2)-[BELONGS_TO]->(p6)<-[BELONGS_TO]-(email5)-[BELONGS_TO]->(p5)<-[BELONGS_TO]-(a1:{badFlag:true})

我试过这样的事情:

MATCH (newEmail:Email{value:'john@gmail.com'})-[:BELONGS_TO]->(p7)-[*]-(badPerson)<-[:BELONGS_TO]-(badFeature{badFlag:'true'}) RETURN badPerson, badFeature;

这似乎只有一个级别的链接,但是当路径可能比Neo4j控制台示例更长时它不起作用。

我需要有关Cypher查询的帮助,这将有助于我解决此问题。 我最终将使用我的应用程序使用Neo4j的Java API进行此操作。使用Java API进行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

你的查询中有一个拼写错误。 PART_OF应为BELONGS_TO。这应该适合你:

MATCH (newEmail:Email {value:'john@gmail.com'})-[:BELONGS_TO]->(p7)-[*]-(badPerson)<-[:BELONGS_TO]-(badFeature {badFlag:'true'})
RETURN badPerson, badFeature;

旁白:您似乎对所有属性使用字符串值。我将替换字符串值&#39; true&#39;并且&#39; false&#39;布尔值为truefalse。同样,始终为数字的值应该只使用整数或浮点值。