예제 #1
0
 /**
  * {@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));
         }
     }
 }