11

私はneo4jで遊んでいますが、疑問に思っていたのですがtype、ノードにどのタイプのノードを指定するプロパティがあるのが一般的ですか?私はこの方法を探してみましたが、nameこのような目的で使用する人もいますが、それが良い方法と見なされるのか、それともインデックスがより実用的な方法になるのか疑問に思いました。

例としては、「ユーザー」ノードがあります。これは、次のタイプになりますuser。このように、インデックスが不良の場合、全ノードスキャンを実行して、のタイプを探すことができますuser

4

7 に答える 7

11

ラベルは neo4j 2.0 に追加されました。彼らはこの問題を解決します。

ラベル付きのノードを作成できます。

CREATE (me:American {name: "Emil"}) RETURN me;

ラベルで一致させることができます:

MATCH (n:American)
WHERE n.name = 'Emil'
RETURN n

ノードに任意の数のラベルを設定できます。

MATCH (n)
WHERE n.name='Emil'
SET n :Swedish:Bossman
RETURN n

ノード上の任意の数のラベルを削除できます。

MATCH (n { name: 'Emil' })
REMOVE n:Swedish

等...

于 2013-12-06T18:24:26.447 に答える
7

確かに、ユースケースによって異なります。type プロパティを追加してからすべてのユーザーを検索したい場合、すべてのノードでそのプロパティを調べてユーザーを取得する必要があるため、問題が発生する可能性があります。その場合、おそらくインデックスの方が適切に機能しますが、インデックスで利用できない条件と関係を持つすべてのユーザーに対してクエリを実行する必要がある場合はそうではありません (もちろん、インデックスが「開始」のソースである場合を除きます)。私のようなグラフがあり、関係タイプが A-(knows)-(B) のような 2 つの異なるノード タイプを意味し、A または B がユーザーまたは顧客になる可能性がある場合、それは機能しません。

したがって、ユースケースは非常に重要です。グラフを一般的にモデル化するのは簡単ですが、使用パターンに従って「調整」することが重要です。

于 2012-04-21T03:50:35.090 に答える
4

私見では、ノードにtypeプロパティを配置する必要はありません。代わりに、特定の「タイプ」のすべてのノードを参照する一般的な方法は、すべてのユーザーノードを「ユーザー」と呼ばれるノードに接続することです。そうすれば、ユーザーノードから始めて、すべてのユーザーノードを非常に簡単に見つけることができます。「ユーザー」ノード自体にインデックスを付けて簡単に見つけられるようにすることも、参照ノードに接続することもできます。

于 2012-04-20T05:40:58.290 に答える
2

それは本当にあなた次第だと思います。インデックス付きのタイプ属性を好む人もいますが、他のインデックス付き属性を使用してインデックス ヒットの数を絞り込む場合 (たとえば、21 歳以上のすべてのユーザーを検索する場合) に最も役立つことがわかりました。

とはいえ、@Luanne が指摘するように、私たちのほとんどはまずグラフ内で問題を解決しようとします。それを行う別の方法 (そして私の意見ではより自然な方法) は、関係タイプを使用して実用的なノード タイプを推測することです。 B は「知る」ことができる別のユーザー、トピック、または「知る」ことができるその他のオブジェクトでなければなりません。

于 2012-04-20T18:39:48.103 に答える
2

それが常識だと言えます。例として、これはまさに Spring Data Neo4j が特定のノードのエンティティ タイプを認識する方法です。各ノードには、エンティティの修飾クラス名を含む「 type 」プロパティがあります。これらのプロパティは「types」インデックスで自動的にインデックス付けされるため、ノードを非常に高速に検索できます。ユースケースをこのように実装できます。

于 2013-03-26T12:14:26.827 に答える
2

クライアント API の場合、要素の型をプロパティとしてモデル化すると、クライアント側のコードで適切なドメイン オブジェクトを簡単にインスタンス化できるため、常に各ノード/頂点に型のプロパティを含めます。

これには「type」変数名が一般的に使用されますが、Python などの一部の言語では「type」は予約語であるため、Bulbs では「element_type」を使用します ( http://bulbflow.com/quickstart/#models )。

エッジ/関係にはすでにタイプ (ラベル) が含まれているため、これは必要ありません。Neo4j は、関係のラベルの代わりにキーワード「タイプ」も使用することに注意してください。

于 2012-04-23T00:14:16.107 に答える