0

我正在使用 Neo4j 批量插入器从 RDBMS 导入一些数据。该数据被处理,插入并且一些节点被缓存以便以后唯一索引。问题是,当使用 时UniqueFactory,会再次创建节点,从而导致重复。我确定我错过了一些东西。

有没有办法为已存在的未编入索引的节点创建唯一索引?最好使用Java客户端调用?

编辑:这是简化的代码

BatchInserter inserter = BatchInserters.inserter(DB_PATH);
try {
    for (Person p : rdbms.getPersons()) {
        // Process data, modeling in graph form
        inserter.createNode(personProperties);
        Long cityId = inserter.createNode(cityProperties);
        cache.put(cityId, Type.CITY);
        // More nodes
        // Relationships (they aren't cached)
    }
} finally {
    inserter.shutdown();
}

GraphDatabaseService db = new GraphDatabaseFactory()
                .newEmbeddedDatabase(DB_PATH);
try {
    for (Entry<Long, Type> entry : cache.entrySet()) {
        Long nodeId = entry.getKey();
        Type nodeType = entry.getValue();
        UniqueFactory<Node> nodeFactory = new UniqueFactory.UniqueNodeFactory(
            db, nodeType.name().toLowerCase()) {
                @Override protected void initialize(
                        Node created, Map<String, Object> properties) {
                    for (Entry<String, Object> entry : properties.entrySet()) {
                        created.setProperty(entry.getKey(), entry.getValue());
                    }
                }
            };
        Node nodeToIndex = db.getNodeById(nodeId);
        Entry<String, Object> nameAndValue 
                = getIndexedPropertyNameAndValue(nodeType, node);
        nodeFactory.getOrCreate(nameAndValue.getKey(), nameAndValue.getValue());
    }
} finally {
    db.shutdown();
}
4

0 回答 0