Neo4j: шаг за шагом, чтобы создать автоматический индекс
Я создаю новую базу данных Neo4j. У меня есть тип node, который называется User, и мне нужен индекс по свойствам пользователя Идентификатор и EmailAddress. Как настроить индекс, когда база данных является новой? Я заметил, что в файле 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
И добавьте node и выполните запрос, чтобы найти Идентификатор, который, как я знаю, существует
START n=node:Identifier(Identifier = "USER0")
RETURN n;
то я получаю
MissingIndexException: Index `Identifier` does not exist
Как создать индекс и использовать его в стартовом запросе? Для этого я хочу использовать файлы конфигурации и cypher. то есть в настоящее время я играю только в консоли Power Tool.
Ответы
Ответ 1
Добавьте в файл 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
Создайте автоматический индекс для узлов
neo4j-sh (0)$ index --create node_auto_index -t Node
Проверьте, существуют ли они
neo4j-sh (0)$ index --indexes
Должен возвращаться
Node indexes:
node_auto_index
При запросе используйте следующий синтаксис для указания индекса
start a = node:node_auto_index(Identifier="USER0")
return a;
При автоматическом индексировании node имя индекса node_auto_index
Эта информация взята из комментария внизу этой страницы
Обновление
Если вы хотите индексировать свои текущие данные, которые были там до включения автоматической индексации (где Property_Name - это имя вашего индекса)
START nd =node(*)
WHERE has(nd.Property_Name)
WITH nd
SET nd.Property_Name = nd.Property_Name
RETURN count(nd);
Ответ 2
В Neo4j 2.0 вы должны использовать метки и новые ограничения вместо
CREATE CONSTRAINT ON (n:User) ASSERT n.Identifier IS UNIQUE
CREATE CONSTRAINT ON (n:User) ASSERT n.EmailAddress IS UNIQUE
Если адрес электронной почты не уникален для пользователя, просто создайте простой индекс:
CREATE INDEX ON :User(EmailAddress)
Ответ 3
Индексы, в основном сделанные по свойству, которое используется для условия. В Neo4j 2.0 индексы легко сделать сейчас.
Создать индекс на ярлыке
CREATE INDEX ON :Person(name)
Индекс отбрасывания на ярлыке
DROP INDEX ON :Person(name)
Создать ограничение уникальности
CREATE CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Ограничить ограничение уникальности
DROP CONSTRAINT ON (book:Book) ASSERT book.isbn IS UNIQUE
Для перечисления всех индексов и ограничений в neo4j-браузере используется следующая команда
:schema
Список индексов и ограничений для конкретной метки с помощью:
:schema ls -l :YourLabel