PHP Conference Japan 2024

SolrClient::addDocuments

(PECL solr >= 0.9.2)

SolrClient::addDocuments新增 SolrInputDocument 實例的集合到索引

說明

public SolrClient::addDocuments(陣列 $docs, 布林值 $overwrite = true, 整數 $commitWithin = 0):

新增多個文件至索引。

參數

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