Adds a Script to the query.
public addScriptField ( string $name, Elastica\Script\AbstractScript $script ) | ||
$name | string | |
$script | Elastica\Script\AbstractScript | Script object |
/** * @group functional */ public function testSearch() { $index = $this->_createIndex(); $type = $index->getType('test'); $type->setMapping(new Mapping(null, array('location' => array('type' => 'geo_point')))); $type->addDocuments(array(new Document(1, array('location' => array('lat' => 48.8825968, 'lon' => 2.3706111))), new Document(2, array('location' => array('lat' => 48.9057932, 'lon' => 2.2739735))))); $index->refresh(); $scriptFile = new ScriptFile('calculate-distance', array('lat' => 48.858859, 'lon' => 2.3470599)); $query = new Query(); $query->addScriptField('distance', $scriptFile); $resultSet = $type->search($query); $results = $resultSet->getResults(); $this->assertEquals(2, $resultSet->count()); $this->assertEquals(array(3.1494078652615), $results[0]->__get('distance')); $this->assertEquals(array(7.463982587692456), $results[1]->__get('distance')); }
/** * @group functional */ public function testSearch() { $index = $this->_createIndex(); $type = $index->getType('test'); $type->setMapping(new Mapping(null, array('location' => array('type' => 'geo_point')))); $type->addDocuments(array(new Document(1, array('location' => array('lat' => 48.8825968, 'lon' => 2.3706111))), new Document(2, array('location' => array('lat' => 48.9057932, 'lon' => 2.2739735))))); $index->refresh(); $scriptFile = new ScriptFile('calculate-distance', array('lat' => 48.858859, 'lon' => 2.3470599)); $query = new Query(); $query->addScriptField('distance', $scriptFile); try { $resultSet = $type->search($query); } catch (ResponseException $e) { if (strpos($e->getMessage(), 'Unable to find on disk script') !== false) { $this->markTestIncomplete('calculate-distance script not installed?'); } throw $e; } $results = $resultSet->getResults(); $this->assertEquals(2, $resultSet->count()); $this->assertEquals(array(3.1494078652615), $results[0]->__get('distance')); $this->assertEquals(array(7.463982587692456), $results[1]->__get('distance')); }
/** * @group unit */ public function testAddScriptFieldsToArrayCast() { $query = new Query(); $scriptField = new Script('script'); $query->addScriptField('script', $scriptField); $scriptField->setScript('another script'); $anotherQuery = new Query(); $anotherQuery->addScriptField('script', $scriptField); $this->assertEquals($query->toArray(), $anotherQuery->toArray()); }