SolrClient::addDocuments

(PECL solr >= 0.9.2)

SolrClient::addDocuments β€” ДобавляСт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ экзСмпляров SolrInputDocument Π² индСкс

ОписаниС

public function 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 ΒΆ
15 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);
?>