如何使用neo4j和gremlin设计我的数据集

时间:2013-09-07 14:33:31

标签: neo4j cypher gremlin

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

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可以是 saler或买家。 如何在neo4j中建模这个数据集,这样当我使用gremlin查询时,

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

1 个答案:

答案 0 :(得分: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/)操作从那里进一步转换它。