/** * @param string $name Name of the Script field * @param \Elastica\Script $script * @throws \Elastica\Exception\InvalidException * @return \Elastica\ScriptFields */ public function addScript($name, Script $script) { if (!is_string($name) || !strlen($name)) { throw new InvalidException('The name of a Script is required and must be a string'); } $this->setParam($name, $script->toArray()); return $this; }
/** * Set a script for this aggregation. * * @param string|Script $script * * @return $this */ public function setScript($script) { if ($script instanceof Script) { $params = array_merge($this->getParams(), $script->toArray()); return $this->setParams($params); } return $this->setParam('script', $script); }
/** * @group unit */ public function testConstructor() { $value = "_score * doc['my_numeric_field'].value"; $script = new Script($value); $expected = array('script' => $value); $this->assertEquals($value, $script->getScript()); $this->assertEquals($expected, $script->toArray()); $params = array('param1' => 'one', 'param2' => 10); $script = new Script($value, $params); $expected = array('script' => $value, 'params' => $params); $this->assertEquals($value, $script->getScript()); $this->assertEquals($params, $script->getParams()); $this->assertEquals($expected, $script->toArray()); $lang = 'mvel'; $script = new Script($value, $params, $lang); $expected = array('script' => $value, 'params' => $params, 'lang' => $lang); $this->assertEquals($value, $script->getScript()); $this->assertEquals($params, $script->getParams()); $this->assertEquals($lang, $script->getLang()); $this->assertEquals($expected, $script->toArray()); }
/** * Add a script_score function to the query * @param Script $script a Script object * @param AbstractFilter $filter an optional filter to apply to the function * @return \Elastica\Query\FunctionScore */ public function addScriptScoreFunction(Script $script, AbstractFilter $filter = NULL) { return $this->addFunction('script_score', $script->toArray(), $filter); }
/** * 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.elastic.co/guide/en/elasticsearch/reference/current/docs-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) { $requestData = array('doc' => $data->getData()); if ($data->getDocAsUpsert()) { $requestData['doc_as_upsert'] = true; } $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 instanceof Document && ($data->isAutoPopulate() || $this->getConfigValue(array('document', 'autoPopulate'), false)) && !isset($options['fields'])) { $options['fields'] = '_source'; } } else { $requestData = $data; } //If an upsert document exists if ($data instanceof Script || $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(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; }
/** * Add a script_score function to the query. * * @param Script $script a Script object * @param AbstractFilter $filter an optional filter to apply to the function * @param float $weight the weight of the function * * @return $this */ public function addScriptScoreFunction(Script $script, AbstractFilter $filter = null, $weight = null) { return $this->addFunction('script_score', $script->toArray(), $filter, $weight); }
/** * Adds a Script to the query * * @param string $name * @param \Elastica\Script $script Script object * @return \Elastica\Query Query object */ public function addScriptField($name, Script $script) { $this->_params['script_fields'][$name] = $script->toArray(); return $this; }