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

如何使用neo4j和gremlin设计我的数据集,neo4j,cypher,gremlin,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 IB

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

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的查询时


从tableName中选择b_CName、id、amount、date,其中s_CName=IBM_USA、IBM_AUS

我在gremlin用户邮件列表中也注意到了您的问题(您在邮件列表中提供了有关您尝试过的事情的更多信息):

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

company --sellsTo--> company
company --parent--> company
将交易金额和日期放在“sellsTo”边缘上,在数据集中每行创建一个这样的边缘。在公司顶点的“companyName”字段上创建一个键索引,以便可以查找公司。你的小精灵会是这样的:

['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
上的键索引查找您关心的两家公司,并使用
\uuu()
将它们放入管道中。然后你遍历到这两家公司出售给的公司。您可以使用
select
抓取
tx
(交易边缘)和
buyer
顶点,对它们中的每一个执行闭包,将它们转换为您想要的字段,这将产生类似的结果(对于一个结果,您的小精灵可能会在完整数据集中返回其中的几个):


如果这不是您需要的最终格式,您可以使用一些groovyjdk()操作来进一步转换它

坦克斯·斯蒂芬。一个疑问。。因此,最初在创建节点和边时。我应该使用属性创建customerNode吗。考虑第一行(IbMySUS和PasisiU.US)来对它们进行排序吗?根据我提供的模型,您的加载策略将是循环遍历每一行数据,通过我建议创建的公司名称字段中的关键索引i查找“公司”顶点。如果它不存在,则创建它。对买方和卖方字段(对于子字段和父字段)执行此操作,并在它们之间构建“父”边界(如果其中一个是新的)。最后一步是添加“sellsTo”边缘。您应该能够在文件的一次传递中完成所有这些操作。我不知道您的确切数据集,但请考虑使用BotGrice()。这将有助于简化代码。
[[1,100,2/3/2012],Pepsi_USA]