public function testUpdateDocument() { $client = $this->_getClient(); $index = $client->getIndex('elastica_test'); $type = $index->getType('update_type'); $id = 1; $type->addDocument(new Document($id, array('name' => 'bruce wayne batman', 'counter' => 1))); $newName = 'batman'; $document = new Document($id); $script = new Script("ctx._source.name = name; ctx._source.counter += count", array('name' => $newName, 'count' => 2)); $document->setScript($script); $type->updateDocument($document, array('refresh' => true)); $updatedDoc = $type->getDocument($id)->getData(); $this->assertEquals($newName, $updatedDoc['name'], "Name was not updated"); $this->assertEquals(3, $updatedDoc['counter'], "Counter was not incremented"); }
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()); }
public function testUpdateDocumentByDocumentWithScript() { $index = $this->_createIndex(); $type = $index->getType('test'); $client = $index->getClient(); $newDocument = new Document(1, array('field1' => 'value1', 'field2' => 10, 'field3' => 'should be removed', 'field4' => 'value4')); $script = new Script('ctx._source.field2 += count; ctx._source.remove("field3"); ctx._source.field4 = "changed"'); $script->setParam('count', 5); $newDocument->setScript($script); // should use document fields because document does not exist, script is avoided $client->updateDocument(1, $newDocument, $index->getName(), $type->getName(), array('fields' => '_source')); $document = $type->getDocument(1); $this->assertInstanceOf('Elastica\\Document', $document); $data = $document->getData(); $this->assertArrayHasKey('field1', $data); $this->assertEquals('value1', $data['field1']); $this->assertArrayHasKey('field2', $data); $this->assertEquals(10, $data['field2']); $this->assertArrayHasKey('field3', $data); $this->assertEquals('should be removed', $data['field3']); $this->assertArrayHasKey('field4', $data); $this->assertEquals('value4', $data['field4']); // should use script because document exists, document values are ignored $client->updateDocument(1, $newDocument, $index->getName(), $type->getName(), array('fields' => '_source')); $document = $type->getDocument(1); $this->assertInstanceOf('Elastica\\Document', $document); $data = $document->getData(); $this->assertArrayHasKey('field1', $data); $this->assertEquals('value1', $data['field1']); $this->assertArrayHasKey('field2', $data); $this->assertEquals(15, $data['field2']); $this->assertArrayHasKey('field4', $data); $this->assertEquals('changed', $data['field4']); $this->assertArrayNotHasKey('field3', $data); }