2016-06-16 2 views
0

У меня есть Solr запрос, который работает отлично:вопросы длины с Solr выберите POST с Curl в PHP

$ch    = curl_init(); 
$ch_searchURL = "$base_url/$collection/select?q=$s&wt=json&indent=true"; 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
curl_setopt($ch, CURLOPT_URL, $ch_searchURL); 
$rawData = curl_exec($ch); 
$json = json_decode($rawData,true); 

Изначально моя $s переменная была буквально одна вещь: например, ?q=name:brian, но моя база пользователь хочет возможность поиска несколько вещей сразу, так что я начал строить, что:

?q=name:("brian"+OR+"mike"+OR+"james"+OR+"emma"+OR+"luke") 

Затем он попал в точку, где они хотели найти 5000 вещей сразу, что вызвало этот метод построения из запроса Solr GET к сбою в буквальном длина URL больше, чем максимальная допустимая длина ~ 2000, так что я думал, что с помощью POST может работать, что я сделать, добавив следующие строки:

$ch_searchURL = "$base_url/$collection/select"; 
$multiline_q = "q=$s&wt=json&indent=true"; 
curl_setopt($ch, CURLOPT_POSTFIELDS, $multline_q); 

Это, казалось, позволило мне искать около 500 предметов за раз - (что все равно, в мире GET, выведите URL-адрес длиной около 4000) - так лучше, чем метод GET, но как только я пройду мимо этого количества элементов, запрос solr снова завершится.

Потому что я POSTING (может быть?), я не получаю никакого ответа от solr, поэтому я не знаю, что вызывает запрос сбой, и я не могу вручную протестировать запрос в браузер, потому что это ~ 40 000 символов и не будет вставляться. Если я var_dump($rawData);, я вижу это:

string(238) " 05 " // or 04, or 08 

Я использовал Solr совсем немного с PHP & локон, но всегда с помощью метода GET. Это мой первый набег на использование POST. Я здесь что-то не так? Я просто превысил фактическое количество опций q, которые я могу попросить solr получить для меня, независимо от метода?

Любой свет, что кто-то может пролить на это было бы полезно ...

ответ

1

Там нет ограничений на стороне Solr - мы регулярно используем Solr аналогичным образом.

Вам необходимо посмотреть настройки вашего контейнера сервлетов (Tomcat, Jetty и т. Д.) И увеличить максимальный размер POST. Посмотрите maxPostSize, если вы используете Tomcat и maxFormContentSize, если используете Jetty.

источник: link

+0

Я не использую Tomcat или Jetty (я не уверен, что те делают). Я перехожу прямо из PHP в solr, используя cURL. Я сделал 'ini_set ('post_max_size', '100M');' и 'ini_set ('upload_max_filesize', '100M');' как на ссылочной странице, так и на странице, которая делает расчет, но это не выглядит чтобы иметь какое-либо значение. У меня также нет сообщений об ошибках, и все же я просто получаю вывод «NULL». –

+0

Tomcat или Jetty - это контейнер под управлением Solr. Но Solr должен поддерживать это просто отлично, ограничения POST намного выше того, что вы отправляете по умолчанию. НО. Существует параметр с именем 'maxBooleanClauses', который по умолчанию установлен в Solr. Вероятно, вы нажмете этот предел, если сразу ищете 5000 идентификаторов :-) – MatsLindh

Смежные вопросы