長度問題,我已經可以正常使用一個Solr的查詢:使用Solr選擇POST與捲曲的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長度約爲4,000) - 比GET方法好得多,但是一旦我越過這些數量的項目,solr查詢就會再次失敗。因爲我在發佈(也許?),我沒有從solr得到任何錯誤響應,所以我不知道是什麼導致查詢失敗,我不能手動測試查詢因爲它的瀏覽器長達40,000個字符並且不會粘貼。如果我做var_dump($rawData);
,我看到:
string(238) " 05 " // or 04, or 08
我使用Solr的用PHP &捲曲了不少,但始終與 GET方法。這是我第一次使用POST。我在這裏做錯了什麼?我是否超過了q
選項的實際數量,我可以要求solr爲我檢索,而不管方法如何?
任何光線,任何人都可以在這個棚將是有益的......
我沒有使用Tomcat或Jetty(我不確定那些是做什麼的)。我使用cURL從PHP直接進入solr。我已經完成了ini_set('post_max_size','100M');''和'ini_set('upload_max_filesize','100M');'在引用頁面和計算頁面上完成了,但看起來並不像做出任何改變。我也沒有錯誤報告,並且我只是得到一個'NULL'輸出。 –
Tomcat或Jetty是運行Solr的容器。但Solr應該支持這一點,POST限制超出了默認提交的範圍。但。默認情況下,在Solr中有一個名爲'maxBooleanClauses'的設置。如果你一次搜索5000個ID,你可能會達到這個限制:-) – MatsLindh