我正在使用 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();
}