ConFoo 2025

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, который выполняет те же функции с полностью противоположным флагом bool.

$allowDups = false тоже самое, что и $overwrite = true

commitWithin

Количество миллисекунд для автоматической фиксации документа. Доступно, начиная с Solr 1.4. По умолчанию (0) означает отключено.

Если значение указано, остаётся контроль над тем, когда делать фиксацию для самого Solr, оптимизируя количество коммитов до минимума, при этом соблюдая требования к задержке обновления, и Solr автоматически выполнит фиксацию, когда наступит самое старое добавление в буфер.

Возвращаемые значения

Возвращает объект SolrUpdateResponse или выбрасывает исключение в случае возникновения ошибки.

Ошибки

Выбрасывает SolrClientException, если клиент отказал или возникла проблема с подключением.

Выбрасывает SolrServerException, если сервер Solr не смог обработать запрос.

Примеры

Пример #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
        )

)

Смотрите также

  • SolrClient::addDocument() - Добавляет документ в индекс
  • SolrClient::commit() - Завершает каждое добавление и удаление, которое сделали в индексе

Добавить

Примечания пользователей 1 note

up
1
bjorn at bjorn-erik dot biz
14 years ago
If you want to add a bunch of documents from a database, this would be the way to go, assuming you have fetched the records from the database and put them in an array called $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