2017-02-13 5 views
0

"uid"という名前のプロパティを使用して、すべてのノードに固有の識別子を格納しています。このプロパティは、すべてのタイプで維持されます。ただし、GraphDatabase.findNode(...)では、 "label"にnull以外の値を渡す必要があります。では、クロスタイプの検索はどのように行うのですか?インデックス付きプロパティを使用して、すべてのタイプでNeo4jノードを見つけるにはどうすればよいですか?

私が考えることができるのは、これを行うためのサイファークエリを実行することだけです。

+0

このuidプロパティの値はどのように作成しますか? – alexanoid

+0

テスト目的のために、私はcypherステートメントを使ってノードを作成しました:CREATE(n:TEST {uid: "test"}) –

答えて

4

私はここで二つのオプションを参照してください。

1)すべてのノードが持っている新しい「スーパー」のラベルを作成し、このラベルにあなたのインデックスを作成します。ノードはすべてのノードが持つスーパーラベルを動作する新しいラベルを作成することができ、複数のラベルを持つことができますので

2)は、手動インデックス

1.「スーパー」ラベル

を使用してください。次にuidプロパティのスキーマインデックスをに作成し、というラベルを付けてクエリを実行します。例えば

は、あなたが現在ノードラベルUserCustomerがあり、uidプロパティは、両方のノードラベル間123あるノードのためのインデックス付き検索を行いたいとしましょう。 UserまたはCustomerラベルのいずれかを持っているすべてのノードに新しいラベルPersonを作成します。

MATCH (a) 
WHERE any(x in labels(a) WHERE x IN ["User", "Customer"]) 
SET a:Person; 

:Person(uid)にインデックスを作成します。

CREATE INDEX ON :Person(uid); 

これはそれが本当に一意性制約を持たなければならない固有の識別子であるので、 (インデックスを作成する):

CREATE CONSTRAINT ON (p:Person) ASSERT p.uid IS UNIQUE; 

この新しいスキーマインデックスを検索:

MATCH (p:Person {uid: "123"}) 
RETURN p 

かは、JavaのAPIであるため、:

Node person = graphdb.findNode("Person", "uid", "123") 

2.マニュアルインデックス

は、JavaのAPIを使用しているので、あなたもcreating a manual indexのオプションがあります

// Create index 
IndexManager index = graphdb.index(); 
Index<Node> people = index.forNodes("people"); 

// Add nodes to index 
Node user1 = graphdb.createNode(); 
user1.setProperty("uid", "123"); 

// Search index 
IndexHits<Node> hits = people.get("uid", "123"); 
Node user123 = hits.getSingle(); 
+0

ありがとう。これは非常に役に立ちます。フォローアップの質問:フィールド "uid"に自動インデックスを設定し、.execute(...)を使用してクエリ "MATCH(n {uid" :{uid}})RETURN n "を返します。それは反パターンですか? –

+0

それはうまくいくはずです。自動インデックスは基本的にノードを手動インデックスに追加するトランザクションハンドラを登録します。しかし、Cypherからマニュアルインデックスを検索するには、[START句](http://neo4j.com/docs/developer-manual/3.1/cypher/clauses/start/)を使用する必要があります。個人的には、一意性を保証するための制約を伴う「スーパー」ラベルアプローチを使用します。 –

+0

別のフォローアップの質問:START句のインデックス名が "node_auto_index"で、プロパティ名が引数として渡されることを示唆する自動インデックスを使用するための参照が見つかりました。しかし、私がneo4jブラウザからこれを試してみると、「Index'node_auto_index'は存在しません」と報告されています。何が欠けていますか? –

関連する問題