【发布时间】:2018-01-31 16:10:09
【问题描述】:
首先我基于https://www.safaribooksonline.com/library/view/apache-solr-php/9781782164920/ch02s04.html 尝试了以下操作:
$update = $solrClient->createUpdate();
$doc = $update->createDocument();
$doc->setKey('id', "systemx en 1 194502");
$doc->setField('name', 'george');
$doc->setFieldModifier('sku', 'set');
$update->addDocument($doc)->addCommit();
$result = $solrClient->update($update);
var_dump($result);
显然,我的 solr 客户端 (2.4.0) 版本不支持此类功能。我出现以下错误:
PHP Fatal error: Call to undefined method SolrClient::createUpdate() in /opt/labs/developers/yfischer/gend7/tools/testyf.php on line 23
PHP Stack trace:
PHP 1. {main}() /opt/labs/developers/yfischer/gend7/tools/testyf.php:0
然后,我尝试直接使用 curl。
$post = json_encode(array(array(
'id' => 'systemx en 1 194502',
'name' => array('set' => 'george')
)));
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://myserver:8983/solr/dev/update?commit=true');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
));
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);
curl_exec ($ch); curl_close ($ch);
我得到以下输出:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
{"responseHeader":{"status":0,"QTime":132}}
尽管如此,当我尝试使用 http://myserver:8983/solr/dev/select?q=%3A&fq=id%3A%22systemx+en+1+194502%22&wt=json&indent=true 查询文档时,名称字段保持不变。
【问题讨论】:
-
Contenttype至少应该在您的 curl 条目中为Content-Type。 Solr 日志说明了什么?此外,书中的示例使用了 Solarium - 这是一个用于与 Solr 对话的纯 PHP 库,因此您可以在不更改 PHP 安装的情况下更新该库。 -
谢谢,MatsLindh,但不幸的是,这并没有帮助。按照您的建议编辑了内容类型标头,我在 json 中得到了响应: {"responseHeader":{"status":0,"QTime":238}} 仍然没有更新记录。另外,从pecl.php.net/package/solr 看来,solr 客户端的最新稳定版本是 2.4.0,这是我正在使用的版本。
-
但是您引用的这本书没有使用 PECL Solr 扩展。它正在使用the Solarium PHP Library。如果您要按照示例进行操作,则必须使用编写示例的相同库。
-
谢谢,MatsLindh。你的评论有帮助。如果你想把它作为答案,我可以奖励你。