我有一个包含以下字段的数据集:
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;
答案 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/)操作从那里进一步转换它。