欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Solr + php 报400

程序员文章站 2022-05-15 09:55:05
...
初学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 标准。

希望能帮助到你。

相关标签: solr php