2014-09-05 4 views
1

Извиняюсь передовым, если есть уже ответ, но я не нашел ...Solr обновления сжатого запрос

Я играл с экземпляром Solr, и я индексировать миллионы документов, эти были разделены на json-файлы с 500K документами на файл размером около 60 МБ. При сжатии сжимается до 6 МБ. Итак, мне было интересно, может ли быть способ отправки сжатого файла, то есть 6M вместо 60 МБ, после чего при получении файла распакуйте/дефлятируйте перед его обработкой.

Я посмотрел вокруг золя вики, но Solr плагины «продвинутые и не рекомендуется»

+0

Какой контейнер приложения вы используете? Связанная пристань? Клиент должен был получить запрос и сфотографировать его, чтобы вы могли попробовать «Content-Encoding: gzip» вместе с 'GzipFilter' в причале. – MatsLindh

+0

Если вы используете SolrJ для индексирования документов, вы можете использовать метод SolrServer.setAllowCompression http://www.solr-start.com/javadoc/solr-lucene/org/apache/solr/client/solrj/impl/HttpSolrServer.html # setAllowCompression-boolean- – sidgate

+0

@MatsLindh: Я не уверен, что я делаю неправильно. Я пробовал это, но я получаю эту ошибку: 'FAILED GzipFilter: javax.servlet.UnavailableException: org.eclipse.jetty.servlets.GzipFilter javax.servlet.UnavailableException: org.eclipse.jetty.servlets. GzipFilter' –

ответ

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