我正在使用 neomodel 和 jexp-batch-importer(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-batch-importer 导入节点和关系,以便之后使用上面给出的模型。
我的 node.cvs 看起来像这样:
identifier:string:TokenNode count:int
spd 2
cdu 3
和边缘.csv:
identifier:string:TokenNode identifier:string:TokenNode occurence
spd cdu OCCURENCE
spd cdu OCCURENCE
Neo4j 的导入适用于 2 个节点和 2 个关系。但我无法访问新模型中的关系。见下文:
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
有没有办法将关系映射到发生?是否可以在使用批量导入器导入时增加边缘的权重而不是创建两条边缘?
问候。
编辑:
我已经分析了批量导入器创建的结构和来自 neomodel 的结构,似乎 neomodel 做了一些奇怪的事情。插入两个节点和它们之间的一种关系。
Batch-Importer 的结构
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 添加了诸如“类别”和“实例”之类的内容,并具有从节点到所有其他节点的关系。它还将“TokenNode”添加到“类别”列。我认为批量导入器与新模型不兼容:(