Elastica\Client::updateDocument PHP Method

updateDocument() public method

Update document, using update script. Requires elasticsearch >= 0.19.0.
public updateDocument ( integer | string $id, array | Elastica\Script\AbstractScript | Document $data, string $index, string $type, array $options = [] ) : Response
$id integer | string document id
$data array | Elastica\Script\AbstractScript | Document raw data for request body
$index string index to update
$type string type of index to update
$options array array of query params to use for query. For possible options check es api
return Response
    public function updateDocument($id, $data, $index, $type, array $options = [])
    {
        $path = $index . '/' . $type . '/' . $id . '/_update';
        if ($data instanceof AbstractScript) {
            $requestData = $data->toArray();
        } elseif ($data instanceof Document) {
            $requestData = ['doc' => $data->getData()];
            if ($data->getDocAsUpsert()) {
                $requestData['doc_as_upsert'] = true;
            }
            $docOptions = $data->getOptions(['version', 'version_type', 'routing', 'percolate', 'parent', 'fields', 'retry_on_conflict', 'consistency', 'replication', 'refresh', 'timeout']);
            $options += $docOptions;
            // set fields param to source only if options was not set before
            if ($data instanceof Document && ($data->isAutoPopulate() || $this->getConfigValue(['document', 'autoPopulate'], false)) && !isset($options['fields'])) {
                $options['fields'] = '_source';
            }
        } else {
            $requestData = $data;
        }
        //If an upsert document exists
        if ($data instanceof AbstractScript || $data instanceof Document) {
            if ($data->hasUpsert()) {
                $requestData['upsert'] = $data->getUpsert()->getData();
            }
        }
        if (!isset($options['retry_on_conflict'])) {
            $retryOnConflict = $this->getConfig('retryOnConflict');
            $options['retry_on_conflict'] = $retryOnConflict;
        }
        $response = $this->request($path, Request::POST, $requestData, $options);
        if ($response->isOk() && $data instanceof Document && ($data->isAutoPopulate() || $this->getConfigValue(['document', 'autoPopulate'], false))) {
            $responseData = $response->getData();
            if (isset($responseData['_version'])) {
                $data->setVersion($responseData['_version']);
            }
            if (isset($options['fields'])) {
                $this->_populateDocumentFieldsFromResponse($response, $data, $options['fields']);
            }
        }
        return $response;
    }

Usage Example

Example #1
0
 /**
  * Update document, using update script. Requires elasticsearch >= 0.19.0.
  *
  * @param  int                      $id      document id
  * @param  array|\Elastica\Document $data    raw data for request body
  * @param  string                   $index   index to update
  * @param  string                   $type    type of index to update
  * @param  array                    $options array of query params to use for query. For possible options check es api
  * @return \Elastica\Response
  * @link http://www.elasticsearch.org/guide/reference/api/update.html
  */
 public function updateDocument($id, $data, $type, $index = 'activehire', array $options = [])
 {
     return $this->client->updateDocument($id, $data, $index, $type, $options);
 }