1

我试图通过本机 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)实际上不起作用。

我想问有没有什么解决方案可以查询索引的真实状态,或者有什么想法可以同步创建索引,而不是官方的异步方法。

谢谢你的时间!

4

0 回答 0