首先,我根据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 =查询文档时是的,名称字段保持不变。
答案 0 :(得分:2)
您引用的书籍未使用PECL Solr扩展程序。它使用的是Solarium PHP库。如果您要按照示例进行操作,则必须使用与编写示例相同的库。
Solarium库does have built-in support for updates,而二进制Solr扩展目前没有特定的更新支持(但您可以浏览general request
function,它允许使用更新请求提交您自己的XML)。 / p>