是否可以仅使用关系属性的一部分值来查询neo4j中的图形?

时间:2015-06-29 17:16:24

标签: neo4j graph-databases

我正在尝试将数据流的信息移动到数据库。数据流是这样的:

E_App1将数据发送到I_App1。然后,I_App1将此数据发送到I_App3。然后,I_App3将此数据发送到I_App5。 E_App2将数据发送到I_App2。然后,I_App2将此数据发送到I_App3。然后,I_App3将此数据发送到I_App5。 E_App3将数据发送到I_App2。然后,I_App2将此数据发送到I_App4。然后,I_App4将此数据发送到I_App5。 I_App5然后将此数据发送到I_App6。 E_App4将数据发送到I_App3。然后,I_App3将此数据发送到I_App5。 I_App5然后将此数据发送到I_App6。 E_App5将数据发送到I_App2。然后,I_App2将此数据发送到I_App4。然后,I_App4将此数据发送到I_App5。

我正在考虑使用名为“OF”的“发送数据”关系属性,该属性将包含正在发送的数据的名称,以便跟踪特定应用程序的流程。下图中的某些内容。是否可以查询OF值,例如“显示其OF值仅包含E_App4的所有关系”?

这是我第一次尝试使用Graph DB而我正在考虑使用它,因为关系很复杂。我不是在寻找高性能。我是否应该遵循其他方法来实现跟踪特定应用程序流程的结果?

链接到图表:http://s27.postimg.org/5qieemks3/Graph_Data_Modeling.jpg

2 个答案:

答案 0 :(得分:1)

您的图表有点复杂,但您要问的是找到OF类型的关系,并将节点类型E_App4作为结束节点。开始节点没有限制。

所以这个查询应该有效:

match (startNode) -[of:OF]->(endNode:E_App4) return startNode, of, endNode;

本节假设如下:

  1. 关系将从开始节点指向结束节点。因此,不会计算E_App4作为起始节点的任何关系。如果您还想计算这些数量,请移除->并将其替换为-
  2. 起始节点可以是任何内容。
  3. 仅考虑类型OF的关系。请注意,名称区分大小写。该关系必须标有OF
  4. 结束节点必须标记为E_App4
  5. 修改

    再次阅读你的问题show all relations whose OF value contains E_App4 only我想我误解了你。你问你能检查一下这种关系的价值吗?是的你可以。这是查询:

    match (startNode) -[of:OF]->(endNode) where has(of.property) and of.property = "E_App4" return of;
    

    这假定:

    1. 关系中定义的属性具有键property
    2. 这只会检查拥有密钥property的关系。如果您的关系没有此密钥,则不会计算这些关系。

答案 1 :(得分:0)

谢谢Rash,这对我很有帮助。我被困在定义过滤器,但一些搜索帮助我找到如何使用*。这适用于其他可能因我而陷入困境的人:

图表在某种程度上是这样的,有很多节点和与Data属性混淆的关系只带有识别信息。

z-[send]->b
y-[send]->b
w-[send]->d
x-[send]->c
q-[send]->c
b-[send]->c-[send]->e
also c-[send]->d

每个关系的Data属性都将包含它所携带的源。因此,远离的关系将在“发送”关系的“数据”属性中以数据方式定义许多来源:“ABC,XYZ,QWR,SDF,TYOP,Zxcvb”。

//to know which all send relations have ABC part of Data property
MATCH ()-[r:send]->() WHERE r.Data =~ ".*ABC.*" RETURN r
//to know which all send relations have TYOP part of Data property
MATCH ()-[r:send]->() WHERE r.Data =~ ".*TYOP.*" RETURN r

我希望这会帮助那些仍在掌握所有这一切的人。