2013-08-23 6 views

Odpowiedz

40

Istnieją etykiety funkcji (węzeł), które mogą zwracać wszystkie etykiety węzła.

5
START n=node(*) RETURN labels(n) 
46

Aby uzyskać wszystkie odrębne etykiety węzła:

MATCH (n) RETURN distinct labels(n) 

Aby uzyskać zliczania węzła dla każdej etykiecie:

MATCH (n) RETURN distinct labels(n), count(*) 
+5

'MATCH n RETURN DISTINCT Etykiety (n)' jest 8 znaków mniej wpisać :) –

+0

Zgadzam się z @FLekschas a ponadto Neo zaleca użycie 'MATCH' dla nowych baz Neo4j ponieważ' START' jest dla starszych indeksów. – ADTC

+0

'Neo.ClientError.Statement.SyntaxError Nawiasy są wymagane do identyfikacji węzłów we wzorach, tj. (N) ...' (v. 3.1.1) – vladkras

14

Jeśli chcesz, aby wszystkie poszczególne etykiety (nie kombinacje) Cię zawsze można rozwinąć w odpowiedziach:

MATCH (n) 
WITH DISTINCT labels(n) AS labels 
UNWIND labels AS label 
RETURN DISTINCT label 
ORDER BY label 
2

Jeśli używasz API Javy, można szybko uzyskać iterację wszystkich Label s w bazie danych tak:

GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase); 
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels(); 
+1

"z Cypher" - OP –

0

Jeśli chcesz uzyskać etykiety węzła określić, a następnie użyć labels(node) ; Jeśli chcesz uzyskać wszystkie etykiety węzłów w neo4j, użyj tej funkcji: call db.labels;, nigdy nie używaj tego zapytania: MATCH n RETURN DISTINCT LABELS(n). Wykona pełny skan tabeli, który jest bardzo powolny.

1

Neo4j 3.0 wprowadził procedurę, która zwraca wszystkie dostępne etykiety w bazie danych. Zastosowanie:

call db.labels();