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());
 }
Beispiel #2
0
 /**
  * @group unit
  */
 public function testSetScript()
 {
     $script = new Script('foo');
     $this->assertEquals('foo', $script->getScript());
     $script->setScript('bar');
     $this->assertEquals('bar', $script->getScript());
     $this->assertInstanceOf('Elastica\\Script', $script->setScript('foo'));
 }
 /**
  * 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;
 }