2013-12-17 69 views
5

サイファーのプロパティを扱うとき、あなたはそのようなプロパティの値と一致するように正規表現を使用することができます。のNeo4j 2.0ワイルドカード検索

Match (n)-[:IS_A]-() where (n:Course_Driving_001) and (n.name =~ '(?i).*criteria.*' or n.description =~ '(?i).*criteria.*') return distinct n limit 20; 

私は、ラベル名と同じことをしたいと思います。私は特定の文字列を含むすべての一意のラベルを取得したいと思います。次のようなものがあります。

Match (n)-[:IS_A]-() where (n:Course_*_001) return distinct n; 

これはCypherですか?またはRestAPI?正規表現ですか?

私はNeo4j 2.0リリースを使用しています。

答えて

8

ラベルにregexを直接使用することはできません。しかし、これが可能であるlabels機能を使用して:

MATCH (n)-[:IS_A]->() 
WHERE any(l IN labels(n) WHERE l=~'Course_*_001') 
RETURN distinct n; 

は、それはあなたのDB内のすべてのノードに触れると、このクエリは、潜在的に高価であることに注意してください。複数のラベルを使用するようにデータモデルをリファクタリングすることができます。 Course および Course_xyz_001。この場合、最初に訪問するノードの数を減らす MATCH (n:Course) ....を使用できます。

+0

+1複数のラベルで、 ':Course(type)'のインデックスを使用し、 'type'属性に" Driving_001 "を入れてください。しかし、それは遅くなるかもしれません。 –

+0

ラベルが複数あっても、これは遅すぎると思います。新しいラベルが作成されるたびにラベル名を独自のグラフに保存しようとします。そうすれば、私はそれらをすばやく見つけることができます。私は他の場合でもあなたの例を使用することができるかもしれません。ありがとう! –

関連する問題