SolrClient::addDocuments

(PECL solr >= 0.9.2)

SolrClient::addDocuments将一组 SolrInputDocument 实例添加到索引中

说明

public SolrClient::addDocuments(array $docs, bool $overwrite = true, int $commitWithin = 0): void

将一组文档添加到索引中。

参数

docs

包含 SolrInputDocument 实例集合的数组。此数组必须是实际的变量。

overwrite

是否覆盖现有文档。如果为 false,则将存在重复项(多个具有相同 ID 的文档)。

警告

PECL Solr < 2.0 使用 $allowDups 而不是 $overwrite,它们具有相同的函数,但布尔标志相反。

$allowDups = false 等同于 $overwrite = true

commitWithin

自动提交此文档的毫秒数。从 Solr 1.4 开始可用。默认值(0)表示禁用。

指定此值时,它将控制何时进行提交的控制权留给 Solr 本身,从而优化提交次数,同时仍然满足更新延迟要求,并且当缓冲区中最旧的添加到期时,Solr 将自动执行提交。

返回值

返回一个 SolrUpdateResponse 对象,或在失败时抛出异常。

错误/异常

如果客户端出现故障或存在连接问题,则抛出 SolrClientException

如果 Solr 服务器无法处理请求,则抛出 SolrServerException

示例

示例 #1 SolrClient::addDocuments() 示例

<?php

$options
= array
(
'hostname' => SOLR_SERVER_HOSTNAME,
'login' => SOLR_SERVER_USERNAME,
'password' => SOLR_SERVER_PASSWORD,
'port' => SOLR_SERVER_PORT,
);

$client = new SolrClient($options);

$doc = new SolrInputDocument();

$doc->addField('id', 334455);
$doc->addField('cat', 'Software');
$doc->addField('cat', 'Lucene');

$doc2 = clone $doc;

$doc2->deleteField('id');
$doc2->addField('id', 334456);

$docs = array($doc, $doc2);

$updateResponse = $client->addDocuments($docs);

// 除非传递了 $commitWithin 或调用了 SolrClient::commit,否则不会将任何更改写入磁盘

print_r($updateResponse->getResponse());

?>

上面的示例将输出类似于

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 2
        )

)

参见

添加注释

用户贡献的注释 1 个注释

bjorn at bjorn-erik dot biz
13 年前
如果要从数据库中添加一堆文档,假设您已从数据库中获取了记录并将其放入名为 $recordset 的数组中,那么这将是最好的方法。

<?php
foreach ($recordset as $key=>$value){
$docs_array[$key] = new SolrInputDocument();
$docs_array[$key]->addField('id', $value['document_id']);
$docs_array[$key]->addField('name',$value['document_name']);
}
$client->addDocuments($docs_array);
?>
To Top