0

我有一个包含如下字段的数据集:

id  amount date        s_pName   s_cName      b_pName   b_cName

 1    100   2/3/2012      IBM    IBM_USA        Pepsi    Pepsi_USA  
 2    200   21/3/2012     IBM    IBM_USA        Coke     Coke_UK
 3    300   12/3/2012     IBM    IBM_USA        Pepsi    Pepsi_USA
 4    1100  22/3/2012     Pepsi  IBM_Aus        IBM      IBM_USA

这里所有 4 个字段,如 s_pName s_cName b_pName b_cName 可以是卖家或买家。 如何在 neo4j 中对该数据集进行建模,以便当我使用 gremlin 进行查询时,

从表名中选择 b_CName,id,amount,date 其中 s_cName = IBM_USA,IBM_AUS;

4

1 回答 1

0

我在 gremlin-users 邮件列表上也注意到了您的问题(您在其中提供了有关您尝试过的事情的更多信息):https ://groups.google.com/forum/#!topic/gremlin-users/AxsF2eJvpOA

我确信有几种方法可以解决这个建模问题,所以我将提供一些需要考虑的事情,希望这会激发您的解决方案。首先,不要考虑买家和卖家,只需考虑这样一个事实,即您拥有向其他公司出售商品的“公司”,并且公司具有等级制度(这意味着公司可以有母公司)。然后,您的模型归结为:

company --sellsTo--> company
company --parent--> company

将您的交易金额和日期放在“sellsTo”边上,在数据集中每行创建一个这样的边。在公司顶点的“companyName”字段上创建一个关键索引,以便您可以查找公司。您的 Gremlin 将类似于:

['IBM_USA','IBM_AUS'].collect{g.V('companyName',it).next()}._().outE('sellsTo').as('tx').inV.as('buyer').select{[it.id, it.amount, it.date]}{it.companyName}

因此,将其分解,您可以通过键索引查找您关心的两家公司,companyName并将它们与_(). 然后你遍历这两家公司出售给的公司。您使用select抓取tx(事务边缘)和buyer顶点对它们中的每一个执行闭包,以将它们转换为您想要的字段,这将产生类似的结果(对于一个结果,您的 Gremlin 显然可能会返回其中的几个与您的完整数据集):

[[1,100,2/3/2012],Pepsi_USA]

如果这不是您需要的最终格式, 您可以使用一些 Groovy JDK ( http://groovy.codehaus.org/groovy-jdk/ ) 操作来进一步转换它。

于 2013-09-07T17:20:21.770 回答