neo4j come restituire tutte le etichette dei nodi con Cypher?

Non riesco a trovare il modo per restituire un nodo di etichette con Cypher.

Qualcuno conosce la sintassi per questa operazione?

InformationsquelleAutor Sovos | 2013-08-23

 

7 Replies
  1. 53

    C’è una funzione etichette(nodo) in grado di restituire tutte le etichette per un nodo.

  2. 68

    Per ottenere tutte distinte etichette dei nodi:

    MATCH (n) RETURN distinct labels(n)
    

    Per ottenere il numero di nodi per ogni etichetta:

    MATCH (n) RETURN distinct labels(n), count(*)
    
    • MATCH n RETURN DISTINCT LABELS(n) è di 8 caratteri in meno per il tipo 🙂
    • D’accordo con @FLekschas e, inoltre, Neo consiglia di utilizzare MATCH per i nuovi Neo4j database a causa START è per eredità indici.
    • Neo.ClientError.Statement.SyntaxError Parentheses are required to identify nodes in patterns, i.e. (n) ... (v. 3.1.1)
    • A questa domanda ha anche neo4j tag oltre a cypher. La più breve da scrivere (e più veloce per eseguire!) query per ottenere tutte distinte etichette dei nodi è CALL db.labels — almeno dal neo4j 3.0, vedere anche pagina CHIAMATA in neo4j manuale
    • Come posso tornare etichette per una lista di nodi?
  3. 20

    Neo4j 3.0 ha introdotto la procedura di db.labels() strega restituire tutte le etichette disponibili nel database. Uso:

    call db.labels();
    
    • questo è l’approccio più efficiente
    • call è 4ms vs 15ms per MATCH (n) sul mio digitialocean prova DB. nota: ho le etichette gerarchiche, e MATCH li restituisce come ["RawFile", "RawPhoto"], dove call restituisce solo il appiattita elenco.
  4. 18

    Se si desidera che tutte le singole etichette (non le combinazioni) si può sempre espandere le risposte:

    MATCH (n)
    WITH DISTINCT labels(n) AS labels
    UNWIND labels AS label
    RETURN DISTINCT label
    ORDER BY label
    
  5. 5
     START n=node(*) RETURN labels(n)
    
    • I risultati sono attualmente in un incubo. Restituisce 1 riga per ogni nodo. START n=node(*) RETURN DISTINCT(labels(n)) restituisce lo stesso MATCH (n) RETURN distinct labels(n), ma prende ~10 volte più a lungo (sul mio db)
  6. 3

    Se si utilizza l’API Java, è possibile ottenere rapidamente un iteratore di tutti i Labels nel database in questo modo:

    GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase);
    ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels();
    
    • “con Cypher” — OP
  7. 2

    Se si desidera di ottenere le etichette di specificare il nodo, quindi utilizzare labels(node); Se si desidera solo per ottenere tutte le etichette dei nodi in neo4j, quindi utilizzare questa funzione invece: call db.labels;, mai e poi mai utilizzare questa query: MATCH n RETURN DISTINCT LABELS(n). Verrà eseguita una scansione completa della tabella, che è molto molto lento..

Lascia un commento