getData() public method

Returns the document data.
public getData ( ) : array | string
return array | string Document data
Beispiel #1
0
 /**
  * @param Document|array $documentOrSource Document object or source array
  * @return Message
  *
  * @throws \Exception
  * @throws GdbotsPbjException
  */
 public function unmarshal($documentOrSource)
 {
     if ($documentOrSource instanceof Document) {
         return $this->doUnmarshal($documentOrSource->getData());
     }
     return $this->doUnmarshal($documentOrSource);
 }
 /**
  * Adds the given document to the search index
  *
  * @param  \Elastica\Document $doc Document with data
  * @return \Elastica\Response
  */
 public function addDocument(Document $doc)
 {
     $path = urlencode($doc->getId());
     $type = Request::PUT;
     // If id is empty, POST has to be used to automatically create id
     if (empty($path)) {
         $type = Request::POST;
     }
     $options = $doc->getOptions(array('version', 'version_type', 'routing', 'percolate', 'parent', 'ttl', 'timestamp', 'op_type', 'consistency', 'replication', 'refresh', 'timeout'));
     $response = $this->request($path, $type, $doc->getData(), $options);
     $data = $response->getData();
     // set autogenerated id to document
     if (($doc->isAutoPopulate() || $this->getIndex()->getClient()->getConfigValue(array('document', 'autoPopulate'), false)) && $response->isOk()) {
         if (!$doc->hasId()) {
             if (isset($data['_id'])) {
                 $doc->setId($data['_id']);
             }
         }
         if (isset($data['_version'])) {
             $doc->setVersion($data['_version']);
         }
     }
     return $response;
 }
Beispiel #3
0
 /**
  * @param \Elastica\Response $response
  * @param \Elastica\Document $document
  * @param string             $fields   Array of field names to be populated or '_source' if whole document data should be updated
  */
 protected function _populateDocumentFieldsFromResponse(Response $response, Document $document, $fields)
 {
     $responseData = $response->getData();
     if ('_source' == $fields) {
         if (isset($responseData['get']['_source']) && is_array($responseData['get']['_source'])) {
             $document->setData($responseData['get']['_source']);
         }
     } else {
         $keys = explode(',', $fields);
         $data = $document->getData();
         foreach ($keys as $key) {
             if (isset($responseData['get']['fields'][$key])) {
                 $data[$key] = $responseData['get']['fields'][$key];
             } elseif (isset($data[$key])) {
                 unset($data[$key]);
             }
         }
         $document->setData($data);
     }
 }
Beispiel #4
0
 /**
  * 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;
 }
 /**
  * @group unit
  */
 public function testDataPropertiesOverloading()
 {
     $document = new Document(1, array('field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3', 'field4' => null));
     $this->assertEquals('value1', $document->field1);
     $this->assertEquals('value2', $document->field2);
     $this->assertEquals('value3', $document->field3);
     $this->assertNull($document->field4);
     try {
         $document->field5;
         $this->fail('Undefined field get should throw exception');
     } catch (InvalidException $e) {
         $this->assertTrue(true);
     }
     $this->assertTrue(isset($document->field1));
     $this->assertTrue(isset($document->field2));
     $this->assertTrue(isset($document->field3));
     $this->assertFalse(isset($document->field4), 'Field4 should not be isset, because it is null');
     $this->assertFalse(isset($document->field5), 'Field5 should not be isset, because it is not set');
     $data = $document->getData();
     $this->assertArrayHasKey('field1', $data);
     $this->assertEquals('value1', $data['field1']);
     $this->assertArrayHasKey('field2', $data);
     $this->assertEquals('value2', $data['field2']);
     $this->assertArrayHasKey('field3', $data);
     $this->assertEquals('value3', $data['field3']);
     $this->assertArrayHasKey('field4', $data);
     $this->assertNull($data['field4']);
     $document->field1 = 'changed1';
     unset($document->field3);
     try {
         unset($document->field5);
         $this->fail('Undefined field unset should throw exception');
     } catch (InvalidException $e) {
         $this->assertTrue(true);
     }
     $this->assertEquals('changed1', $document->field1);
     $this->assertFalse(isset($document->field3));
     $newData = $document->getData();
     $this->assertNotEquals($data, $newData);
 }