/** * @param \Flowpack\ElasticSearch\Domain\Model\AbstractType $type * @param string $id * @param \Flowpack\ElasticSearch\Transfer\Response $response * @throws \Flowpack\ElasticSearch\Domain\Exception\DocumentPropertiesMismatchException * @return \Flowpack\ElasticSearch\Domain\Model\Document */ public function createFromResponse(Model\AbstractType $type, $id = null, \Flowpack\ElasticSearch\Transfer\Response $response) { $content = $response->getTreatedContent(); $verificationResults = new ErrorResult(); if (isset($content['_index']) && $type->getIndex()->getName() !== $content['_index']) { $error = new Error('The received index name "%s" does not match the expected one "%s".', 1340264838, array($content['_index'], $type->getIndex()->getName())); $verificationResults->addError($error); } if (isset($content['_type']) && $type->getName() !== $content['_type']) { $error = new Error('The received type name "%s" does not match the expected one "%s".', 1340265103, array($content['_type'], $type->getName())); $verificationResults->addError($error); } if (isset($content['_id']) && $id !== null && $id !== $content['_id']) { $error = new Error('The received id "%s" does not match the expected one "%s".', 1340269758, array($content['_id'], $id)); $verificationResults->addError($error); } if ($verificationResults->hasErrors()) { $exception = new \Flowpack\ElasticSearch\Domain\Exception\DocumentPropertiesMismatchException('The document\'s properties do not match the expected ones.', 1340265248); $exception->setErrorResult($verificationResults); throw $exception; } $version = $content['_version']; $data = $content['_source']; return new Model\Document($type, $data, $id, $version); }
/** * Gets a specific field's value from this' data * * @param string $fieldName * @param boolean $silent * * @throws \Flowpack\ElasticSearch\Exception * @return mixed */ public function getField($fieldName, $silent = false) { if (!array_key_exists($fieldName, $this->data) && $silent === false) { throw new \Flowpack\ElasticSearch\Exception(sprintf('The field %s was not present in data of document in %s/%s.', $fieldName, $this->type->getIndex()->getName(), $this->type->getName()), 1340274696); } return $this->data[$fieldName]; }
/** * @param Index $index * @param array $types */ public function __construct(Index $index, array $types) { parent::__construct($index); $this->types = $types; $names = array(); foreach ($this->types as $type) { $names[] = $type->getName(); } $this->name = implode(',', $names); }
/** * Sets this mapping to the server */ public function apply() { $content = json_encode($this->asArray()); $response = $this->type->request('PUT', '/_mapping', array(), $content); return $response; }
/** * @param \Flowpack\ElasticSearch\Domain\Model\Index $index * @param string $name */ public function __construct(Index $index, $name) { parent::__construct($index, $name); }