2024年PHP日本大会

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
14年前
如果您想从数据库添加一堆文档,假设您已从数据库中提取记录并将它们放入名为 $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