2016-01-21 27 views
1

從這個topic有兩種方法可以從Java代碼中觸發solr優化。
發送http請求或使用solrj api。
但是如何檢查它的進度?
說,這是一個api,返回優化的進度百分比
或像RUNNING/COMPLETED/FAILED字符串。
有沒有這樣的api?Solr觸發器優化和檢查Java代碼的進度

+0

面臨同樣的問題..你已經找到了一種解決方法? – Yuval

回答

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; 
     } 
    }