2016-06-16 23 views
0

長度問題,我已經可以正常使用一個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爲我檢索,而不管方法如何?

任何光線,任何人都可以在這個棚將是有益的......

回答

1

上有Solr的一側沒有限制 - 我們以類似的方式定期使用Solr的。

您需要查看servlet容器(Tomcat,Jetty等)的設置並增加最大POST大小。如果您使用的是Tomcat和maxFormContentSize(如果您使用的是Jetty),請查找maxPostSize。

來源:link

+0

我沒有使用Tomcat或Jetty(我不確定那些是做什麼的)。我使用cURL從PHP直接進入solr。我已經完成了ini_set('post_max_size','100M');''和'ini_set('upload_max_filesize','100M');'在引用頁面和計算頁面上完成了,但看起來並不像做出任何改變。我也沒有錯誤報告,並且我只是得到一個'NULL'輸出。 –

+0

Tomcat或Jetty是運行Solr的容器。但Solr應該支持這一點,POST限制超出了默認提交的範圍。但。默認情況下,在Solr中有一個名爲'maxBooleanClauses'的設置。如果你一次搜索5000個ID,你可能會達到這個限制:-) – MatsLindh