Neo4j: Шаг за шагом, чтобы создать автоматический индекс

Я создаю новую базу данных Neo4j. У меня есть тип узла с именем Пользователь, и мне нужен индекс свойств пользователя Идентификатор и Адрес электронной почты. Как настроить индекс, когда база данных новая? Я заметил, что в файле 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

И добавьте узел и выполните запрос, чтобы найти идентификатор, который, как я знаю, существует.

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

тогда я получаю

MissingIndexException: Index `Identifier` does not exist

Как создать индекс и использовать его в стартовом запросе? Для этого я хочу использовать только файлы конфигурации и шифр. т.е. в настоящее время я играю только в Power Tool Console.


person Aran Mulholland    schedule 13.10.2012    source источник
comment
Обязательно ознакомьтесь с ответом Боггла ниже - работа индексов значительно проще в версии 2.0+ - и, как вы говорите, это новая база данных, поэтому, надеюсь, переход на последнюю версию neo4j является вариантом...   -  person Dan G    schedule 29.04.2014


Ответы (3)


Добавьте следующее в файл 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_auto_index.

Эта информация взята из комментария внизу этой страницы.

Обновить

Если вы хотите проиндексировать ваши текущие данные, которые были там до включения автоматического индексирования (где Property_Name — это имя вашего индекса)

START nd =node(*) 
WHERE has(nd.Property_Name)
WITH nd
SET nd.Property_Name = nd.Property_Name
RETURN count(nd);
person Aran Mulholland    schedule 14.10.2012
comment
как запустить neo4j-sh в Windows - person cod3monk3y; 08.12.2013
comment
Используйте localhost:7474/webadmin. После загрузки страницы выберите вкладку консоли. вы можете выполнять там команды оболочки. - person MSRS; 18.10.2014
comment
Этот ответ действительно старый, и я не уверен, что это все еще лучший способ сделать это. Некоторые пояснения по этому поводу были бы хороши. - person Aran Mulholland; 11.02.2016

Индексы в основном сделаны на имущество, которое используется для какого состояния. В 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
person Somnath Muluk    schedule 29.04.2014

В 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)
person boggle    schedule 23.02.2014