问题描述
我们正在尝试在 Graphdb 中实现面向客户的详细信息,通过单个查询,我们可以获取客户的详细信息,例如他的地址、电话、电子邮件等。我们已经使用 had address 构建了它,有电子邮件边缘..
g.addV('member').property('id','CU10611972').property('CustomerId','CU10611972').property('TIN','xxxx').property('EntityType','Person').property('pk','pk')
g.addV('email').property('id','CU10611972E').property('pk','pk')
g.addV('primary').property('id','CU10611972EP').property('EmailPreference','Primary').property('EmailType','Home').property('EmailAddress','SNEHA@GMAIL.COM').property('pk','pk')
g.V('CU10611972').addE('has Email').to(g.V('CU10611972E'))
g.V('CU10611972E').addE('has Primary Email').to(g.V('CU10611972EP')
这就是我们与客户建立电子邮件关系的方式。同样,我们与地址和电话有关系。所以现在我们正在使用这个命令来获取与该客户相关的 json 以发送电子邮件,
g.V('CU10611972').out('has Email').out('has Primary Email')
对于完整的客户详细信息,我们对每个 Vertex、电话、电子邮件和地址使用联合..
解决方法
这实际上归结为两件事。
- 一般图形数据建模
- 您使用的图形数据库支持和不支持的内容。
使用 Gremlin 有几种方法可以为单个顶点建模此数据。
- 如果数据库支持,请使用 ['home','mobile'] 等名称列表,并使用元属性为每个名称附加电话号码。
- 我所知道的许多 Gremlin 实现都选择不支持元属性。在这些情况下,您有几个选择。
(a) 有一个用于“家庭”的属性和另一个用于“移动”的属性。如果任何一个都不知道,您要么无法创建该属性,要么为其指定一个值,例如“未知”
(b) 使用带前缀的字符串,例如 ["Home:123456789","Mobile:123456789] 并将它们存储在集合或列表(多属性)中,并使用
startingWith
谓词在 Gremlin 中访问它们。例如 {{ 1}}