Подтвердить что ты не робот

Node идентификаторы в neo4j

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Можно установить уникальные идентификаторы для узлов /realtionships в Neo4J. Вы можете установить его индексирование, установив его в один из файлов конфигурации.

Кроме того, это настоятельно рекомендуется, например, придумать "естественный" идентификатор для ваших узлов и ребер вместо использования Neo4j seq id. Это сэкономит вам поездку туда и обратно в линию. Это то, что я делал в прошлом.

Ответ 3

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

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

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

Ответ 5

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