初學Solr從網上下載了一個例子,但是運行時報以下錯誤:
Fatal error: Uncaught exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' in /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php:338 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php(1170): Apache_Solr_Service->_sendRawGet('http://localhos...') #1 /Applications/XAMPP/xamppfiles/htdocs/phpSolr/index.php(78): Apache_Solr_Service->search('name: ????', 0, 10) #2 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php on line 338
從網上找過答案,大部分都說是schema.xml中沒有定義field,但是我確認我使用的field都說定義了,實在是不知道為什麼了,希望有人知道!!
回複內容:
初學Solr從網上下載了一個例子,但是運行時報以下錯誤:
Fatal error: Uncaught exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' in /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php:338 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php(1170): Apache_Solr_Service->_sendRawGet('http://localhos...') #1 /Applications/XAMPP/xamppfiles/htdocs/phpSolr/index.php(78): Apache_Solr_Service->search('name: ????', 0, 10) #2 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/phpSolr/SolrPhpClient/Apache/Solr/Service.php on line 338
從網上找過答案,大部分都說是schema.xml中沒有定義field,但是我確認我使用的field都說定義了,實在是不知道為什麼了,希望有人知道!!
首先我要說的是 ... 並不是所有的牛奶都叫某某蘇 ... 也並不是所有的錯誤都叫 404 ...
你的這個錯誤是 '400' Status: Bad Request ... 而不是 404 ...
一般來說這個錯誤出現的原因就如你所說 ... 是 schema.xml 中沒有定義 field ...
但是具體如何還要分析 ...
Apache_Solr_Service 這個類不會回傳 solr 的內部錯誤 ... 所以我們要用其他方式解決 ...
第一種方式比較簡單 ... 查看 solr 的 log ... 會有類似於下面一行的內容 ...
SEVERE: org.apache.solr.common.SolrException: ****
其中 **** 就是具體造成錯誤的原因 ...
第二種方法 ... 使用 solr 內建的一個工具叫 solr admin ...
在這個工具裡你可以手動輸入查詢 ... 如果查詢無效的話也會顯示出詳細的錯誤資訊 ...
以你描述的情況來說 ... 只需要輸入 name:???? 然後點確定就好 ...
有了錯誤資訊才能知道如何解決這個問題 ... 不然只能靠東一榔頭西一棒子的猜測 ... 費時費力 ...
只說 solr 報了錯 ... 你也不知道為什麼只希望別人知道 ... 很遺憾 ... 我覺得沒有人會知道 ...
話可能說的有點重 ... 抱歉 ... 但道理是這樣 ...
先要學會良好的描述自己遇到的問題才能希望別人可以準確高效的解決問題 ... 你說是不是 ..?
注意你在調用 Apache_Solr_Service() 建構函式時的傳參。有一個陷阱是第五個參數即 $compatibilityLayer 需傳遞的參數應根據你的 Solr 伺服器版本進行變化,如你是 Solr 4.0+ 應傳遞 new Apache_Solr_Compatibility_Solr4CompatibilityLayer。
原因是 Solr3 和 Solr4 產生的 XML 格式不同,有一些參數在使用時有相容問題,從而觸發 HTTP 400 Bad Request 問題。目前的 solr-php-client 預設使用的是 Solr3 標準。
希望能協助到你。