2014-09-05 93 views
1

我在先進的道歉,如果已經有一個答案,但我還沒有發現任何...Solr的更新壓縮請求

我用Solr的情況下玩耍,我是索引數以百萬計的文檔,這些被分割成每個文件大小爲60MB的500K文檔的json文件。當壓縮縮小到僅僅6MB。 所以我想知道是否可以有一種方法來發送壓縮文件,即6M而不是60MB,從而在收到文件後,在處理它之前解壓縮。

我看了看周圍的溶膠維基,但Solr的插件是「先進的,不推薦使用」

+0

您正在使用哪個應用程序容器?捆綁的碼頭?容器的責任是接收請求並對其進行壓縮,因此您可以在碼頭嘗試'Content-Encoding:gzip'和'GzipFilter'。 – MatsLindh 2014-09-05 13:42:30

+0

如果您使用SolrJ來索引文檔,那麼您可以使用SolrServer.setAllowCompression方法http://www.solr-start.com/javadoc/solr-lucene/org/apache/solr/client/solrj/impl/HttpSolrServer.html #setAllowCompression-boolean- – sidgate 2014-09-05 14:26:52

+0

@MatsLindh:我不知道我做錯了什麼。我試過,但我得到這個錯誤: 'FAILED GzipFilter:javax.servlet.UnavailableException:org.eclipse.jetty.servlets.GzipFilter javax.servlet.UnavailableException:org.eclipse.jetty.servlets。 GzipFilter' – 2014-09-05 14:59:23

回答

0

一番考慮之後,我的結論是,這將是簡單的創建一個REST端點將處理壓縮,然後在本地將數據傳遞到Solr,如下圖所示:

// Grab compressed data and uncompress 
$data = file_get_contents('php://input'); 
$data = gzinflate(substr($data, 10, -8)); 

// Send to Solr 
$ch = curl_init('localhost:8983/solr/update/json?commit=true&'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json']); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_exec($ch); 

所以我並不需要破解的Solr