У меня есть 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 получить для меня, независимо от метода?
Любой свет, что кто-то может пролить на это было бы полезно ...
Я не использую Tomcat или Jetty (я не уверен, что те делают). Я перехожу прямо из PHP в solr, используя cURL. Я сделал 'ini_set ('post_max_size', '100M');' и 'ini_set ('upload_max_filesize', '100M');' как на ссылочной странице, так и на странице, которая делает расчет, но это не выглядит чтобы иметь какое-либо значение. У меня также нет сообщений об ошибках, и все же я просто получаю вывод «NULL». –
Tomcat или Jetty - это контейнер под управлением Solr. Но Solr должен поддерживать это просто отлично, ограничения POST намного выше того, что вы отправляете по умолчанию. НО. Существует параметр с именем 'maxBooleanClauses', который по умолчанию установлен в Solr. Вероятно, вы нажмете этот предел, если сразу ищете 5000 идентификаторов :-) – MatsLindh