database - Neo4j: paso a paso para crear un índice automático
indexing cypher (3)
Estoy creando una nueva base de datos Neo4j. Tengo un tipo de nodo llamado Usuario y me gustaría un índice sobre las propiedades de Identificador de usuario y Dirección de correo electrónico . ¿Cómo se puede configurar un índice cuando la base de datos es nueva? He notado en el archivo neo4j.properties que parece ser soporte para crear índices. Sin embargo, cuando configuro esto como tal
# 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
Y agrega un nodo y haz una consulta para encontrar un identificador que sé que existe
START n=node:Identifier(Identifier = "USER0")
RETURN n;
entonces obtengo un
MissingIndexException: Index `Identifier` does not exist
¿Cómo creo un índice y lo uso en una consulta de inicio? Solo quiero usar archivos de configuración y cifrado para lograr esto. es decir, en este momento solo estoy jugando en la Power Tool Console.
Índices hechos principalmente en la propiedad que se usa para donde condición. En Neo4j 2.0, los índices son fáciles de hacer ahora.
Crear índice en una etiqueta
CREATE INDEX ON :Person(name)
Colocar índice en una etiqueta
DROP INDEX ON :Person(name)
Crear restricción de exclusividad
CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Cláusula de exclusividad de gota
DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Para enumerar todos los índices y restricciones en neo4j-browser, seguir el comando es útil
:schema
Indique índices y restricciones para etiquetas específicas con:
:schema ls -l :YourLabel
Agregue lo siguiente al archivo neo4j.properties
# 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
Crear el índice automático para nodos
neo4j-sh (0)$ index --create node_auto_index -t Node
Comprueba si existen
neo4j-sh (0)$ index --indexes
Debería regresar
Node indexes:
node_auto_index
Al realizar consultas, use la siguiente sintaxis para especificar el índice
start a = node:node_auto_index(Identifier="USER0")
return a;
Como el nodo se indiza automáticamente, el nombre del índice es node_auto_index
Esta información proviene de un comentario en la parte inferior de esta página
Actualizar
En caso de que desee indexar sus datos actuales que estaban allí antes de que se activara la indexación automática (donde Property_Name es el nombre de su índice)
START nd =node(*)
WHERE has(nd.Property_Name)
WITH nd
SET nd.Property_Name = nd.Property_Name
RETURN count(nd);
En Neo4j 2.0, debe usar etiquetas y las nuevas restricciones en su lugar
CREATE CONSTRAINT ON (n:User) ASSERT n.Identifier IS UNIQUE
CREATE CONSTRAINT ON (n:User) ASSERT n.EmailAddress IS UNIQUE
Si el correo electrónico no es único por usuario, simplemente cree un índice simple en su lugar:
CREATE INDEX ON :User(EmailAddress)