2014-09-05 66 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