我试图通过本机 api 为 neo4j 图创建索引,我正在使用org.neo4j:neo4j:3.4.4
,这是我的代码:
public static Boolean createIndex(GraphDatabaseService graphDb, Label label, String property){
Boolean ret = true;
try {
// END SNIPPET: startDb
{
// START SNIPPET: createIndex
IndexDefinition indexDefinition;
try (Transaction tx = graphDb.beginTx()) {
Schema schema = graphDb.schema();
indexDefinition = schema.indexFor(label)
.on(property)
.create();
tx.success();
tx.close();
}
// END SNIPPET: createIndex
// START SNIPPET: wait
try (Transaction tx = graphDb.beginTx()) {
Schema schema = graphDb.schema();
schema.awaitIndexOnline(indexDefinition, 1000, TimeUnit.SECONDS);
tx.success();
tx.close();
}
// END SNIPPET: wait
// START SNIPPET: progress
try (Transaction tx = graphDb.beginTx()) {
Schema schema = graphDb.schema();
System.out.println(String.format("Percent complete: %1.0f%%",
schema.getIndexPopulationProgress(indexDefinition).getCompletedPercentage()));
tx.success();
tx.close();
}
// END SNIPPET: progress
}
} catch (ConstraintViolationException e) {
System.out.println(e);
ret = true;
}
catch (Exception e){
System.out.println(e);
ret = false;
};
return ret;
}
此代码完全来自官方示例,我可以看到Percent complete: 100%
代码中记录的日志。但是,当我使用 neo4j 浏览器和查询打开图表时:schema
,它说索引仍在填充,这意味着该方法schema.getIndexPopulationProgress(indexDefinition)
实际上不起作用。
我想问有没有什么解决方案可以查询索引的真实状态,或者有什么想法可以同步创建索引,而不是官方的异步方法。
谢谢你的时间!