• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SolrClient::addDocuments()

    (PECL solr >= 0.9.2)

    Adds a collection of SolrInputDocument instances to the index

    说明

    publicSolrClient::addDocuments(array $docs[,bool $overwrite= TRUE[,int $commitWithin= 0]]): void

    Adds a collection of documents to the index.

    参数

    $docs

    An array containing the collection of SolrInputDocument instances. This array must be an actual variable.

    $overwrite

    Whether to overwrite existing documents or not. If FALSE there will be duplicates(several documents with the same ID).

    Warning

    PECL Solr < 2.0 $allowDups was used instead of $overwrite, which does the same functionality with exact opposite bool flag.

    $allowDups = false is the same as $overwrite = true

    $commitWithin

    Number of milliseconds within which to auto commit this document. Available since Solr 1.4 . Default(0)means disabled.

    When this value specified, it leaves the control of when to do the commit to Solr itself, optimizing number of commits to a minimum while still fulfilling the update latency requirements, and Solr will automatically do a commit when the oldest add in the buffer is due.

    返回值

    Returns a SolrUpdateResponse object or throws an exception on failure.

    错误/异常

    Throws SolrClientException if the client had failed, or there was a connection issue.

    Throws SolrServerException if the Solr Server had failed to process the request.

    范例

    Example #1 SolrClient::addDocuments() example

    <?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);
    // no changes will be written to disk unless $commitWithin is passed or SolrClient::commit is called
    print_r($updateResponse->getResponse());
    ?>
    

    以上例程的输出类似于:

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

    参见

    • SolrClient::addDocument() Adds a document to the index
    • SolrClient::commit() Finalizes all add/deletes made to the index
    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);
    ?>