如何使用Solr 5.2.1和PHP 5.6.27对现有Solr文档进行部分更新?

时间:2018-01-31 16:10:09

标签: php curl solr

首先,我根据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 =查询文档时是的,名称字段保持不变。

1 个答案:

答案 0 :(得分:2)

您引用的书籍未使用PECL Solr扩展程序。它使用的是Solarium PHP库。如果您要按照示例进行操作,则必须使用与编写示例相同的库。

Solarium库does have built-in support for updates,而二进制Solr扩展目前没有特定的更新支持(但您可以浏览general request function,它允许使用更新请求提交您自己的XML)。 / p>