无法获取与Neomodel和jexpbatchimp的关系

2024-09-27 18:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是neomodel和jexp批处理导入器(https://github.com/jexp/batch-import)。我的模型如下所示。在

class TokenRel(StructuredRel):
    weight = IntegerProperty(default = 1)

class TokenNode(StructuredNode):
    identifier = StringProperty(unique_index = True, required = True)
    count = IntegerProperty(default = 1)
    occurence = Relationship('TokenNode', 'OCCURENCE', model = TokenRel) 

我尝试使用jexp批处理导入器导入节点和关系,以使用上面给出的模型。在

我的节点.cvs看起来像这样:

^{pr2}$

以及边缘.csv公司名称:

identifier:string:TokenNode identifier:string:TokenNode occurence
spd cdu OCCURENCE
spd cdu OCCURENCE

对Neo4j的导入可以很好地处理2个节点和2个关系。但我无法访问neomodel中的关系。见下文:

spdNode = port.getNode('spd') #exists
cduNode = port.getNode('cdu') #exists

if spdNode.occurence.is_connected(cduNode): 
    print('Yes') # yes will be printed

print(spdNode.count) # 2
print(spdNode.occurence.count()) # print: 0 expected: 2
print(cduNode.occurence.count()) # 0

有没有办法将关系映射到事件?在使用batch importer导入时,是否可以增加一条边的权重,而不是创建两条边?

敬上。在

编辑:

我分析了批量导入程序创建的结构和neomodel的结构,看起来neomodel做了一些奇怪的事情。为两个节点和它们之间的一个关系插入。在

来自批处理导入程序的结构

nodes, id, lablel, count, identifier
1, 1 , /, / , /
2, 2, /, 2, spd
3, 3, /, 3, cdu

source target typ id label weight neo4j-relation
2, 3, direct, 1, /, 1, occurence

这是来自neomodel的:

nodes, id, label, category, count, identifier
1, 1, /, TokenNode, /, /
2, 2, /, /, 1, spd
3, 4, /, /, 1, cdu

source, target, type, id, label, weight, neo4j-relation, __instance__
1, 2, direct, 2, /, 1, Token_Node, check
1, 3, direct, 3, /, 1, Token_Node, check
3, 2, direct, 1, /, 1, occurence, unchecked 

因此,neomodel添加了类似“category”和“instance”的内容,并且从节点到所有其他节点都有关系。它还将“TokenNode”添加到“category”列中。我认为批量导入程序与neomodel不兼容:(


Tags: id节点关系countprintidentifierweightdirect
3条回答

嗨,《新模型》的作者。在

RelationshipManager在发出连接时使用CREATE UNIQUE:

https://github.com/robinedwards/neomodel/blob/master/neomodel/relationship_manager.py#L119

这意味着同一类型和方向的两个节点之间只存在一种关系。在

不过,欢迎使用RelationshipManager子类来提供其他行为。在

对于批量导入,neomodel希望通过category节点对相同类型的节点进行分类。在您的示例中,所有的tokennode都需要被分类,因为很多neomodel代码都假设存在这些关系。在

neomodel是一个固执己见的框架,通过使用它,你可以购买某种思维方式。不过,如果你用neo4j打给我irc.freenode.org我可以帮你把批量导入器和neomodel玩得很好。在

我也有同样的问题。我花了几个小时试图弄清楚是否有任何bug,或者我根本不理解NeoModel的API。我阅读了代码和所有文档,但我不清楚。在

在谷歌搜索之后,我终于找到了这个问题。新模型的作者在下面回答。在

不能与同一类的多个节点创建关系是非常令人沮丧的。这使得在我的领域中不可能使用NeoModel。在

文件中没有提到这一点,这让我损失了几个小时。当你看代码的时候也不清楚。在每个基数对象上都有一个名为“all()”的函数,这一事实令人误解。在

在失去工作一天后,我放弃了NeoModel,转而使用纯Py2NeO2.0。在

我很想找点时间来帮助改进NeoModel。这是最先进的OGM为Neo4j在那里。在

有没有办法把关系映射到事件?在使用batch importer导入时,是否可以增加一条边的权重,而不是创建两条边?在

理论上可以更新属性,但实际上这并不是一个可以推广的东西。您可以在csv文件上预先执行此操作,也可以在之后使用cypher语句执行此操作。在

或者您可以使用BatchInserterJavaAPI编写自己的批处理导入器变体(可以从分叉和修改批导入repo开始)。在

我不知道neomodel是否需要关系的其他任何东西,例如节点或关系上的type属性。您可以用cypher测试导入是否有效。在

start cdu=node:TokenNode(identifier="cdu"),spd=node:TokenNode(identifier="spd")
match cdu-[r]-spd
return type(r);

相关问题 更多 >

    热门问题