0

以下、私のコンテキストの概念的な例:

次の名前の抽象クラスがあります: (文字列としてプロパティをUser含む) 次の名前のサブクラスがあります: 次の名前のサブクラスがあります:id
UserFacebookUser
UserTwitterUser

Spring-Data-Neo4j を使用してUser@NodeEntity.

FacebookUseraと aTwitterUserをグラフに挿入するために、テスト クラスを作成します。
全体がうまくいきます => 両方のノードが挿入され、サブクラスの完全修飾名を含む_ type _があります。
例: com.myApp.model.user.FacebookUser.

ここで、この種の暗号クエリを作成したいと思います:
ID = 123 のユーザーを取得するしたがって、一意の対応するレコードを見つけるために、
すべてのユーザー ノード ( と の和集合) をチェックするより効率的な方法を見つける必要FacebookUserがあります。 TwitterUser.

私は、次のように暗号化するように指示する方法を見つけることを期待してい
ましFacebookUserTwitterUser:

しかし、私は管理しませんでした。

私の現在のクエリは、次のとおりです。

@Query("start u=node(*) where has(u.__type__) and u.__type__ =~ '.*User' and has(u.id) and u.id = {0} return u")

これは次のように翻訳されます。

グラフ内のすべてのノードを確認し (まったく効率的ではないと思います)、「User」で終わるノード (FacebookUser と TwitterUser を含む) を保持し、権利を確認します。id

この場合、グラフ全体をスキャンする代わりに、インデックス ノードのみを使用する方法はありますか?

_ type _プロパティの名前を親クラスの完全修飾名に 変更する方法を考えていました。

SDNで簡単にできる?

実際、SDN はノードに関連付けられた Java クラス名をノードのインデックス名として使用しているように見えるため、Facebook と Twitter の両方のサブタイプに対して 1 つのインデックス ノード (ユーザーインデックス ノード) のみを処理できます。

4

1 に答える 1

1

クラスで @Indexed を使用すると、クエリで使用できる TwitterUser などのインデックスを取得する必要があります。ただし、継承アプローチには制限があります。関連する議論については、Spring Data Neo4j - インデックス作成と継承を参照してください。

于 2013-07-17T11:08:37.007 に答える