Идентификаторы узла в neo4j - PullRequest
53 голосов
/ 29 января 2012

Я новичок в Neo4j - только что начал играть с ним вчера вечером.

Я заметил, что все узлы идентифицируются автоматически увеличиваемым целым числом, которое генерируется при создании узла - это всегда так?

В моем наборе данных есть натуральные строковые ключи, поэтому я бы хотел избежать отображения между назначенными Neo4j идентификаторами и моими собственными.Можно ли вместо этого использовать строковые идентификаторы?

Ответы [ 5 ]

66 голосов
/ 29 января 2012

Думайте об идентификаторе узла как о деталях реализации (например, идентификатор строки реляционных баз данных может использоваться для идентификации узлов, но на него нельзя полагаться, чтобы он никогда не использовался повторно).

Вы бы добавили свой естественныйключи как свойства для узла, а затем индексировать ваши узлы с помощью естественного ключа (или включить для них автоматическую индексацию).

E..g в Java API:

Index<Node> idIndex = db.index().forNodes("identifiers");

Node n = db.createNode();
n.setProperty("id", "my-natural-key");
idIndex.add(n, "id",n.getProperty("id"));

// later
Node n = idIndex.get("id","my-natural-key").getSingle(); // node or null

Савтоиндексатор вы бы включили автоиндексирование для вашего поля "id".

// via configuration 
GraphDatabaseService db = new EmbeddedGraphDatabase("path/to/db",
 MapUtils.stringMap( 
    Config.NODE_KEYS_INDEXABLE, "id", Config.NODE_AUTO_INDEXING, "true" ));

// programmatic (not persistent)
db.index().getNodeAutoIndexer().startAutoIndexingProperty( "id" );

// Nodes with property "id" will be automatically indexed at tx-commit
Node n = db.createNode();
n.setProperty("id", "my-natural-key");

// Usage
ReadableIndex<Node> autoIndex = db.index().getNodeAutoIndexer().getAutoIndex();
Node n = autoIndex.get("id","my-natural-key").getSingle();

См .: http://docs.neo4j.org/chunked/milestone/auto-indexing.html И: http://docs.neo4j.org/chunked/milestone/indexing.html

0 голосов
/ 18 мая 2018

ID сгенерированы по умолчанию и не могут быть изменены пользователями. пользователь может использовать ваши строковые идентификаторы как свойство для этого узла.

0 голосов
/ 29 сентября 2015

Помимо всех ответов, neo4j создает собственные идентификаторы, чтобы работать быстрее и лучше обслуживать. Убедитесь, что внутренняя система не конфликтует между идентификаторами, тогда она создаст узлы с такими же свойствами и отобразит в системе как пустые узлы.

0 голосов
/ 19 февраля 2015

В соответствии с Neo docs должны быть автоматические индексы на месте http://neo4j.com/docs/stable/query-schema-index.html но есть еще много ограничений

0 голосов
/ 10 октября 2014

Это должно помочь:

Создать индекс для поддержки автоматической индексации при пакетном импорте. Мы знаем, что если автоматическая индексация включена в neo4j.properties, каждый созданный узел будет добавлен в индексс именем node_auto_index.Теперь вот крутой бит.Если мы добавим исходный ручной индекс (во время пакетного импорта) и назовем его как node_auto_index и включим автоматическую индексацию в neo4j, то вставленные в пакет узлы будут выглядеть как автоматически проиндексированные.И с этого момента каждый раз, когда вы создаете узел, он также индексируется. **

Источник: Идентификация узлов с помощью пользовательских ключей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...