2012-10-13 17 views
23

Tworzę nową bazę danych Neo4j. Mam typ węzła o nazwie Użytkownik i chciałbym indeks na właściwości użytkownika Identyfikator i EmailAddress. W jaki sposób można utworzyć indeks, gdy baza danych jest nowa? Zauważyłem, że w pliku neo4j.properties wygląda na wsparcie dla tworzenia indeksów. Jednakże kiedy ustawić je jako takNeo4j: Krok po kroku, aby utworzyć automatyczny indeks

# 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 

i dodać węzeł i zrobić kwerendę, aby znaleźć identyfikator że wiem istnieje

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

potem dostaję

MissingIndexException: Index `Identifier` does not exist 

Jak zrobić Tworzę indeks i używam go w zapytaniu początkowym? Chcę tylko użyć plików konfiguracyjnych i szyfrowania, aby to osiągnąć. tj. w chwili obecnej gram tylko w Konsoli narzędzi.

+0

Upewnij się, aby zobaczyć odpowiedź BOGGLE jest poniżej - how indeksy praca jest znacznie prostsza w wersji 2.0+ - a jak już mówisz, jest to nowa baza danych, więc mam nadzieję, że przejście do najnowszej wersji neo4j to opcja ... –

Odpowiedz

51

Dodaj następujące do neo4j.properties złożyć

# 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 

utworzyć indeks auto dla węzłów

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

Sprawdź, czy one istnieją

neo4j-sh (0)$ index --indexes 

powinien powrócić

Node indexes: 
node_auto_index 

Podczas odpytywania użyć następującej składni, aby określić indeks

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

jako węzeł jest automatycznie indeksowane nazwa indeksu jest node_auto_index

Ta informacja pochodzi z komentarzem na dole this page

Aktualizacja

W przypadku, gdy chcesz inde x aktualna danych, który był tam wcześniej automatyczne indeksowanie zostało włączone (gdzie property_name to nazwa indeksu)

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

[jak uruchomić neo4j-sh w systemie Windows] (http: // stackoverflow. com/a/19275558/1174169) – cod3monk3y

+2

Użyj http: // localhost: 7474/webadmin. Po wczytaniu strony wybierz kartę konsoli. możesz wykonywać tam polecenia powłoki. – MSRS

+1

Ta odpowiedź jest naprawdę stara i nie jestem pewien, czy to nadal jest najlepszy sposób na zrobienie tego. Niektóre wyjaśnienia na ten temat byłyby dobre. –

8

W Neo4j 2.0, należy użyć etykiet i nowe ograniczenia zamiast

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

Jeśli e-mail nie jest unikalny dla każdego użytkownika, wystarczy utworzyć zwykły indeks zamiast: wykonane

CREATE INDEX ON :User(EmailAddress) 
8

Indeksy głównie na nieruchomości, który jest używany w razie choroby. W Neo4j 2.0 indeksy są teraz łatwe do zrobienia.

Tworzenie indeksu na etykiecie

CREATE INDEX ON :Person(name) 

indeks Drop na etykiecie

DROP INDEX ON :Person(name) 

Tworzenie unikatowości

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

Kropla wyjątkowość ograniczenie

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

Dla wymieniając wszystkie indeksy i ograniczenia w neo4j-browser, następujące polecenie jest przydatna

:schema 

indeksy listy i ograniczenia dla konkretnego etykieta z:

:schema ls -l :YourLabel