1

私は 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

およびedge.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

関係を出現にマッピングする方法はありますか? また、バッチ インポーターでのインポート中に 2 つのエッジを作成する代わりに、エッジの重みを増やすことは可能ですか?

よろしく。

編集:

バッチインポーターが作成する構造とネオモデルからの構造を分析したところ、ネオモデルが奇妙なことをしているようです。2 つのノードとそれらの間の 1 つの関係の両方に挿入します。

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

そして、ここにネオモデルのものがあります:

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 

したがって、ネオモデルは「カテゴリ」や「インスタンス」などを追加し、ノードから他のすべてへの関係を持ちます。また、「TokenNode」を列「category」に追加します。バッチインポーターはneomodelと互換性がないと思います:(

4

3 に答える 3

0

こんにちはネオモデルの作者です。

RelationshipManager は、接続を発行するときに CREATE UNIQUE を使用します。

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

つまり、1 つのタイプと方向の 2 つのノード間には 1 つの関係しか存在しません。

ただし、別の動作を提供するために RelationshipManager をサブクラス化することを歓迎します。

バッチ インポートに関して、neomodel は同じタイプのノードがカテゴリ ノードを介して分類されることを期待します。あなたの例では、多くのネオモデル コードがこれらの関係が存在すると想定しているため、すべての TokenNodes を分類する必要があります。

neomodel は独断的なフレームワークです。これを使用することで、特定の考え方に同意することができます。ただし、irc.freenode.org の #neo4j で私 (robsmoniker) に ping を送信していただければ、おそらくバッチ インポーターと neomodel を適切に機能させることができるでしょう。

于 2013-09-11T10:14:34.403 に答える
0

関係を出現にマッピングする方法はありますか? また、バッチ インポーターでのインポート中に 2 つのエッジを作成する代わりに、エッジの重みを増やすことは可能ですか?

理論的にはプロパティを更新することは可能ですが、実際には一般化することはできません。これは、csv ファイルで前もって行うことも、後で cypher ステートメントを使用して行うこともできます。

または、BatchInserter-Java-API を使用してバッチ インポーターの独自のバリアントを記述します (バッチ インポート リポジトリをフォークして変更することから始めることができます)。

typeノードまたは関係のプロパティなど、ネオモデルが関係に他に何かを必要とするかどうかはわかりません。インポートが機能したことを cypher でテストできます。

start cdu=node:TokenNode(identifier="cdu"),spd=node:TokenNode(identifier="spd")
match cdu-[r]-spd
return type(r);
于 2013-09-07T17:38:08.830 に答える
0

同じ問題がありました。バグがあるのか​​、単に NeoModel API を理解していないのか、何時間もかけて調べました。コードとすべてのドキュメントを読みましたが、よくわかりませんでした。

グーグルで調べた後、私はついにこの質問を見つけました。そして、NeoModel の作成者は以下に回答します。

同じクラスの複数のノードとの関係を作成できないのは非常にイライラします。これにより、私のドメインで NeoModel を使用できなくなります。

ドキュメントに記載されていなかったという事実は、私に数時間を無駄にさせました. コードを見ると、それも明確ではありません。各カーディナリティ オブジェクトに「all()」という関数があるという事実は誤解を招きます。

失われた作業の 1 日の後、私は NeoModel を落とし、純粋な py2neo 2.0 に切り替えています。

ただし、NeoModel の改善に役立つ時間を見つけたいと思っています。これは、Neo4j 向けの最先端の OGM です。

于 2015-02-17T04:52:26.840 に答える