Solr触发器优化并检查Java代码的进度

时间:2016-01-21 08:21:09

标签: java optimization solr solrj

从这个topic开始,有两种方法可以从Java代码中触发solr优化。
发送http请求或使用solrj api 但是如何检查它的进展呢? 比如,一个api返回优化百分比的进度
或者像RUNNING / COMPLETED / FAILED这样的字符串 有没有这样的api?

1 个答案:

答案 0 :(得分:0)

是的,solrj api中的optimize()是一种同步方法。
以下是我用来监控优化进度的内容。

CloudSolrClient client = null;
    try {
        client = new CloudSolrClient(zkClientUrl);
        client.setDefaultCollection(collectionName);
        m_logger.info("Explicit optimize of collection " + collectionName);
        long optimizeStart = System.currentTimeMillis();
        UpdateResponse optimizeResponse = client.optimize();

        for (Object object : optimizeResponse.getResponse()) {
            m_logger.info("Solr optimizeResponse" + object.toString());
        }
        if (optimizeResponse != null) {
            m_logger.info(String.format(
                    " Elapsed Time(in ms) - %d, QTime (in ms) - %d",
                    optimizeResponse.getElapsedTime(),
                    optimizeResponse.getQTime()));
        }
        m_logger.info(String.format(
                "Time spent on Optimizing a collection %s :"
                        + (System.currentTimeMillis() - optimizeStart)
                        / 1000 + " seconds", collectionName));
    } catch (Exception e) {
        m_logger.error("Failed during explicit optimize on collection "
                + collectionName, e);
    } finally {
        if (client != null) {
            try {
                client.close();
            } catch (IOException e) {
                throw new RuntimeException(
                        "Failed to close CloudSolrClient connection.", e);
            }
            client = null;
        }
    }