2012-10-13 17 views
23

Sto creando un nuovo database Neo4j. Ho un tipo di nodo chiamato Utente e vorrei un indice sulle proprietà dell'utente Identificatore e EmailAddress. Come si fa a impostare un indice quando il database è nuovo? Ho notato che nel file neo4j.properties sembra esserci il supporto per la creazione di indici. Tuttavia quando ho impostato questi come in modoNeo4j: Step by Step per creare un indice automatico

# Autoindexing 

# Enable auto-indexing for nodes, default is false 
node_auto_indexing=true 

# The node property keys to be auto-indexed, if enabled 
node_keys_indexable=EmailAddress,Identifier 

e aggiungere un nodo e fare una query per trovare un identificatore che so che esiste

START n=node:Identifier(Identifier = "USER0") 
RETURN n; 

tanto sono un

MissingIndexException: Index `Identifier` does not exist 

Come fare Creo un indice e lo utilizzo in una query di avvio? Voglio solo usare i file di configurazione e Cypher per raggiungere questo obiettivo. Ad esempio, al momento sto giocando solo nella Console del Power Tool.

+0

Assicurati di vedere la risposta di Boggle qui sotto - how indici il lavoro è significativamente più semplice in 2.0+ - e come dici tu è un nuovo database, quindi spero che il passaggio all'ultima versione di neo4j sia un'opzione ... –

risposta

51

Aggiungere il seguente alle neo4j.properties il file

# Autoindexing 

# Enable auto-indexing for nodes, default is false 
node_auto_indexing=true 

# The node property keys to be auto-indexed, if enabled 
node_keys_indexable=EmailAddress,Identifier 

creare l'indice automatico per i nodi

neo4j-sh (0)$ index --create node_auto_index -t Node 

Verificare se esistono

neo4j-sh (0)$ index --indexes 

dovrebbe tornare

Node indexes: 
node_auto_index 

Quando l'interrogazione di utilizzare la seguente sintassi per specificare l'indice

start a = node:node_auto_index(Identifier="USER0") 
return a; 

Come il nodo è automatico indicizzato il nome dell'indice è node_auto_index

Queste informazioni provengono da un commento in fondo this page

Aggiornamento

Nel caso in cui si desidera Inde x i dati attuali che c'era prima che l'indicizzazione automatica è stata attivata (dove nome_proprietà è il nome del vostro indice)

START nd =node(*) 
WHERE has(nd.Property_Name) 
WITH nd 
SET nd.Property_Name = nd.Property_Name 
RETURN count(nd); 
+0

[come avviare neo4j-sh su Windows] (http: // stackoverflow. it/a/19275558/1174169) – cod3monk3y

+2

Utilizzare http: // localhost: 7474/webadmin. Dopo il caricamento della pagina selezionare la scheda della console. qui puoi eseguire i comandi della shell. – MSRS

+1

Questa risposta è davvero vecchia e non sono sicuro che questo sia ancora il modo migliore per farlo. Alcuni chiarimenti su questo sarebbero buoni. –

8

In Neo4j 2.0, è necessario utilizzare le etichette ed i nuovi vincoli invece

CREATE CONSTRAINT ON (n:User) ASSERT n.Identifier IS UNIQUE 
    CREATE CONSTRAINT ON (n:User) ASSERT n.EmailAddress IS UNIQUE 

Se l'email non è unico per ogni utente, basta creare un indice normale invece: fatta

CREATE INDEX ON :User(EmailAddress) 
8

indici principalmente sulla proprietà che viene utilizzato per cui condizione. In Neo4j 2.0, gli indici sono facili da creare ora.

Creare indice su un'etichetta

CREATE INDEX ON :Person(name) 

indice goccia su un'etichetta

DROP INDEX ON :Person(name) 

Crea vincolo di unicità

CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE 

goccia vincolo di unicità

DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE 

messa in vendita di tutti gli indici e vincoli in Neo4j-browser, seguente comando è utile

:schema 

indici List e vincoli per un'etichetta specifica con:

:schema ls -l :YourLabel 
Problemi correlati