public function testSetScript() { $document = new Document(); $script = new Script('ctx._source.counter += count'); $script->setParam('count', 1); $this->assertFalse($document->hasScript()); $document->setScript($script); $this->assertTrue($document->hasScript()); $this->assertSame($script, $document->getScript()); }
/** * Update document, using update script. Requires elasticsearch >= 0.19.0 * * @param int $id document id * @param array|\Elastica\Script|\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, $index, $type, array $options = array()) { $path = $index . '/' . $type . '/' . $id . '/_update'; if ($data instanceof Script) { $requestData = $data->toArray(); } elseif ($data instanceof Document) { if ($data->hasScript()) { $requestData = $data->getScript()->toArray(); $documentData = $data->getData(); if (!empty($documentData)) { $requestData['upsert'] = $documentData; } } else { $requestData = array('doc' => $data->getData()); } $docOptions = $data->getOptions(array('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->isAutoPopulate() || $this->getConfigValue(array('document', 'autoPopulate'), false)) && !isset($options['fields'])) { $options['fields'] = '_source'; } } else { $requestData = $data; } 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(array('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; }