我正在使用Solr PHP Client
并启用并运行Solr 4.3.0
示例。我没有修改schema.xml
文件。当我运行此代码时,出现400
错误:
Uncaught exception 'Apache_Solr_HttpTransportException' with message '400' Status: Bad Request.'
文档未显示在索引中。有趣的是,如果我重新启动Jetty
,则会对文档编制索引。这是我的代码。我想知道我是否遗漏了什么。我认为这是我的输入匹配模式的问题,但id
似乎是唯一必需的字段,而这些其他字段在模式中。我不知道该怎么做。
require_once('SolrPhpClient/Apache/Solr/Service.php');
$solr = new Apache_Solr_Service('localhost', 8983, '/solr/');
if($solr->ping() == null){
die('could not ping solr');
}
$document = new Apache_Solr_Document();
$document->id = 'guid1';
$document->title = 'Title1';
$document->subject = 'The subject is solr';
$document->description = 'This is the description';
$solr->addDocument($document);
$solr->commit();
我得到的完整错误消息是
Fatal error: Uncaught exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' in C:\xampp\htdocs\dev\SolrPhpClient\Apache\Solr\Service.php:364
Stack trace:
#0 C:\xampp\htdocs\dev\SolrPhpClient\Apache\Solr\Service.php(829): Apache_Solr_Service->_sendRawPost('http://localhos...', '<commit expunge...', 3600)
#1 C:\xampp\htdocs\dev\indexerSOLR_PHP.php(20): Apache_Solr_Service->commit()
#2 {main} thrown in C:\xampp\htdocs\dev\SolrPhpClient\Apache\Solr\Service.php on line 364`
答案 0 :(得分:4)
这是Solr 4.x的一个已知问题,并从Solr PHP客户端调用commit。请参阅 Bug #62332 - As of solr 4.0 the waitFlush parameter is removed for commit了解详细信息和补丁以解决问题。
答案 1 :(得分:2)
这就是我如何得到解决方案,我修改了提交方法。在_updateurl变量中添加了'&amp; commit = true'。
public function commit($expungeDeletes = false, $waitFlush = true, $waitSearcher = true, $timeout = 3600)
{
$expungeValue = $expungeDeletes ? 'true' : 'false';
$flushValue = $waitFlush ? 'true' : 'false';
$searcherValue = $waitSearcher ? 'true' : 'false';
//$rawPost = '<commit expungeDeletes="' . $expungeValue . '" waitFlush="' . $flushValue . '" waitSearcher="' . $searcherValue . '" />';
//$this->post=$rawPost;
return $this->_sendRawGet($this->_updateUrl.'&commit=true', $timeout);
}
答案 2 :(得分:0)
您已更改此行。
require_once( 'SolrPhpClient /阿帕奇/ Solr的/ Service.php'); =&GT; require_once( 'Service.php');
也许Service.php这个文件的路径错了。我试着改变这一行。然后成功地工作。
答案 3 :(得分:0)
我遇到了同样的问题,因为我安装了旧版本的PHP Solr扩展(0.9.11)。
获得最新的一个:
pecl download solr-beta
tar xvzf solr-2.1.0.tgz # This can be different depending on the last release number
cd solr-2.1.0/
phpize
./configure
make
sudo make install
# add extension=solr.so to your php.ini / distribution extension loader
感谢this post。