/** * {@inheritDoc} */ public function addDocuments(ClassMetadata $class, array $documents) { $parameters = $this->getParameters($class->parameters); $documentsByIndex = array(); foreach ($documents as $document) { $elasticaDoc = new Document(isset($document["id"]) ? $document["id"] : ''); foreach ($parameters as $name => $value) { if (isset($document[$value])) { if (method_exists($elasticaDoc, "set{$name}")) { $elasticaDoc->{"set{$name}"}($document[$value]); } else { $elasticaDoc->setParam($name, $document[$value]); } unset($document[$value]); } } $elasticaDoc->setData($document); if ($parentField = $class->getParentField()) { if (empty($document[$parentField])) { throw new InvalidArgumentException('Document (index: ' . $elasticaDoc->getIndex() . ' type: ' . $elasticaDoc->getType() . ' id: ' . $document['id'] . ') misses the value for the parent'); } $elasticaDoc->setParent($document[$parentField]); } if ($versionField = $class->getVersionField()) { $version = isset($document[$versionField]) ? $document[$versionField] : null; if (empty($version)) { throw new InvalidArgumentException('Document (index: ' . $elasticaDoc->getIndex() . ' type: ' . $elasticaDoc->getType() . ' id: ' . $document['id'] . ') misses the value for the version'); } if ($this->getForceVersion() == true) { $elasticaDoc->setVersionType('force'); } else { $elasticaDoc->setVersionType($class->getVersionType()); } $elasticaDoc->setVersion($version); } $documentsByIndex[$class->getIndexForWrite($document)][] = $elasticaDoc; } foreach ($documentsByIndex as $index => $documents) { $type = $this->getIndex($index)->getType($class->type); if (count($documents) > 1) { $type->addDocuments($documents); } else { $type->addDocument(reset($documents)); } } }